From c46dd285e540ec15b51ae5fa06dfd4d7b78c265f Mon Sep 17 00:00:00 2001 From: ekatef Date: Wed, 12 Nov 2025 22:58:37 +0100 Subject: [PATCH 01/42] Add regional-specific transmission line types --- Snakefile | 1 + data/power/standard_types/line_types.csv | 12 ++++++++++++ 2 files changed, 13 insertions(+) create mode 100644 data/power/standard_types/line_types.csv diff --git a/Snakefile b/Snakefile index 273b8f4adc..8e20479c78 100644 --- a/Snakefile +++ b/Snakefile @@ -293,6 +293,7 @@ rule base_network: + "base_network/all_transformers_build_network.csv", country_shapes="resources/" + RDIR + "shapes/country_shapes.geojson", offshore_shapes="resources/" + RDIR + "shapes/offshore_shapes.geojson", + line_types="data/power/standard_types/line_types.csv" output: "networks/" + RDIR + "base.nc", log: diff --git a/data/power/standard_types/line_types.csv b/data/power/standard_types/line_types.csv new file mode 100644 index 0000000000..c9d6421c52 --- /dev/null +++ b/data/power/standard_types/line_types.csv @@ -0,0 +1,12 @@ +country,v_nom,name,i_nom +CO,"Not specified 100kV",0.47 +CO,"Not specified 115.0",0.30 +CO,"Not specified 220.0",0.78 +CO,"Not specified 230.0,",2.84 +CO,"Not specified 500.0",0.69 +BO,"Partridge (25kV)",0.31 +BO,"Penguin (44kV)",0.27 +BO,"Penguin (69kV)",0.44 +BO,"Ibis (115kV)",0.50 +BO,"Rail (230kV)",0.43 +BO,"ACAR 750 y ACAR 1250 (500 kV)",0.96 \ No newline at end of file From 39abfe605fe5881e94fe1eba5a4a8d936cc815e4 Mon Sep 17 00:00:00 2001 From: ekatef Date: Wed, 12 Nov 2025 22:59:25 +0100 Subject: [PATCH 02/42] Define a function to load regional line types --- scripts/base_network.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts/base_network.py b/scripts/base_network.py index 2c4aa6afde..feec8b1aee 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -261,6 +261,12 @@ def _load_transformers_from_osm(fp_osm_transformers, buses): return transformers +def _load_regional_linetypes(line_types_csv): + line_types = read_csv_nafix( + line_types_csv, + dtype=dict(country="str", v_nom="str", name="str", i_nom="str"), + ) + return line_types def _get_linetypes_config(line_types, voltages): """ From 410866680ea69a648e5fff7a52ab30c5930fe2d5 Mon Sep 17 00:00:00 2001 From: ekatef Date: Wed, 12 Nov 2025 23:00:18 +0100 Subject: [PATCH 03/42] Load regional line types --- scripts/base_network.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/base_network.py b/scripts/base_network.py index feec8b1aee..def5e0d915 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -495,6 +495,8 @@ def base_network( transformers = _load_transformers_from_osm(inputs.osm_transformers, buses) converters = _load_converters_from_osm(inputs.osm_converters, buses) + region_line_types = _load_regional_linetypes(inputs.line_types) + lines_ac = lines[~lines.dc].copy() lines_dc = lines[lines.dc].copy() lines_ac = _set_electrical_parameters_lines(lines_config, voltages_config, lines_ac) From f727b915db5d469337c1c90bce7f0f881f63c041 Mon Sep 17 00:00:00 2001 From: ekatef Date: Wed, 12 Nov 2025 23:02:41 +0100 Subject: [PATCH 04/42] Move AC linetypes config to GA config --- config.default.yaml | 7 ------- configs/ac_line_types.csv | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 7 deletions(-) create mode 100644 configs/ac_line_types.csv diff --git a/config.default.yaml b/config.default.yaml index c05b884a9b..9eb750f8bb 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -223,13 +223,6 @@ electricity: PV: [solar] lines: - ac_types: - 132.: "243-AL1/39-ST1A 20.0" - 220.: "Al/St 240/40 2-bundle 220.0" - 300.: "Al/St 240/40 3-bundle 300.0" - 380.: "Al/St 240/40 4-bundle 380.0" - 500.: "Al/St 240/40 4-bundle 380.0" - 750.: "Al/St 560/50 4-bundle 750.0" dc_types: 500.: "HVDC XLPE 1000" s_max_pu: 0.7 diff --git a/configs/ac_line_types.csv b/configs/ac_line_types.csv new file mode 100644 index 0000000000..3d577a7616 --- /dev/null +++ b/configs/ac_line_types.csv @@ -0,0 +1,17 @@ +country,v_nom,line_type +BO,25.0,"Partridge (25kV)" +BO,44.0,"Penguin (44kV)" +BO,69.0,"Penguin (69kV)" +BO,115.0,"Ibis (115kV)" +BO,230.0,"Rail (230kV)" +BO,500.0,"ACAR 750 y ACAR 1250 (500 kV)" +CO,110.0,"Not specified 100kV" +CO,115.0,"Not specified 115.0" +CO,220.0,"Not specified 220.0" +CO,230.0,"Not specified 230.0" +default,132.0,"243-AL1/39-ST1A 20.0" +default,220.0,"Al/St 240/40 2-bundle 220.0" +default,300.0,"Al/St 240/40 3-bundle 300.0" +default,380.0,"Al/St 240/40 4-bundle 380.0" +default,500.0,"Al/St 240/40 4-bundle 380.0" +default,750.0,"Al/St 560/50 4-bundle 750.0" \ No newline at end of file From 24be2825e0ff23ff3f5f8476c476f7efdcb4d99d Mon Sep 17 00:00:00 2001 From: ekatef Date: Wed, 12 Nov 2025 23:03:10 +0100 Subject: [PATCH 05/42] Move DC linetypes to GA config --- config.default.yaml | 2 -- configs/dc_line_types.csv | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 configs/dc_line_types.csv diff --git a/config.default.yaml b/config.default.yaml index 9eb750f8bb..6e71aa3de0 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -223,8 +223,6 @@ electricity: PV: [solar] lines: - dc_types: - 500.: "HVDC XLPE 1000" s_max_pu: 0.7 s_nom_max: .inf s_nom_max_min: -.inf diff --git a/configs/dc_line_types.csv b/configs/dc_line_types.csv new file mode 100644 index 0000000000..6b7eef3b80 --- /dev/null +++ b/configs/dc_line_types.csv @@ -0,0 +1,2 @@ +country,v_nom,line_type +default,500.0,"HVDC XLPE 1000" \ No newline at end of file From 1d110901615008e833a51b2e58694313b367b5a1 Mon Sep 17 00:00:00 2001 From: ekatef Date: Wed, 12 Nov 2025 23:09:17 +0100 Subject: [PATCH 06/42] Replace config for linetypes with a GA one --- Snakefile | 4 +++- scripts/base_network.py | 15 +++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/Snakefile b/Snakefile index 8e20479c78..0a28620cc7 100644 --- a/Snakefile +++ b/Snakefile @@ -293,7 +293,9 @@ rule base_network: + "base_network/all_transformers_build_network.csv", country_shapes="resources/" + RDIR + "shapes/country_shapes.geojson", offshore_shapes="resources/" + RDIR + "shapes/offshore_shapes.geojson", - line_types="data/power/standard_types/line_types.csv" + line_types="data/power/standard_types/line_types.csv", + lines_ac_config="configs/ac_line_types.csv", + lines_dc_config="configs/dc_line_types.csv", output: "networks/" + RDIR + "base.nc", log: diff --git a/scripts/base_network.py b/scripts/base_network.py index def5e0d915..9e3c2572c2 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -293,6 +293,13 @@ def _get_linetypes_config(line_types, voltages): ) return {k: v for k, v in line_types.items() if k in voltages} +def _load_lines_config(fl): + line_config = read_csv_nafix( + fl, + dtype=dict(country="str", v_nom="str", name="str"), + ) + return line_config + def _get_linetype_by_voltage(v_nom, d_linetypes): """ @@ -316,12 +323,12 @@ def _get_linetype_by_voltage(v_nom, d_linetypes): return line_type_min -def _set_electrical_parameters_lines(lines_config, voltages, lines): +def _set_electrical_parameters_lines(lines_config, lines, lines_ac_csv): if lines.empty: lines["type"] = [] return lines - linetypes = _get_linetypes_config(lines_config["ac_types"], voltages) + linetypes = _load_lines_config(input.lines_ac_config) lines["carrier"] = "AC" lines["dc"] = False @@ -335,12 +342,12 @@ def _set_electrical_parameters_lines(lines_config, voltages, lines): return lines -def _set_electrical_parameters_dc_lines(lines_config, voltages, lines): +def _set_electrical_parameters_dc_lines(lines_config, lines): if lines.empty: lines["type"] = [] return lines - linetypes = _get_linetypes_config(lines_config["dc_types"], voltages) + linetypes = _load_lines_config(input.lines_dc_config) lines["carrier"] = "DC" lines["dc"] = True From e7bcdfce428fee83683a6edce3c4270d2d288790 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 12 Nov 2025 22:12:22 +0000 Subject: [PATCH 07/42] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- configs/ac_line_types.csv | 2 +- configs/dc_line_types.csv | 2 +- data/power/standard_types/line_types.csv | 2 +- scripts/base_network.py | 9 ++++++--- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/configs/ac_line_types.csv b/configs/ac_line_types.csv index 3d577a7616..5312d77655 100644 --- a/configs/ac_line_types.csv +++ b/configs/ac_line_types.csv @@ -14,4 +14,4 @@ default,220.0,"Al/St 240/40 2-bundle 220.0" default,300.0,"Al/St 240/40 3-bundle 300.0" default,380.0,"Al/St 240/40 4-bundle 380.0" default,500.0,"Al/St 240/40 4-bundle 380.0" -default,750.0,"Al/St 560/50 4-bundle 750.0" \ No newline at end of file +default,750.0,"Al/St 560/50 4-bundle 750.0" diff --git a/configs/dc_line_types.csv b/configs/dc_line_types.csv index 6b7eef3b80..a733e077aa 100644 --- a/configs/dc_line_types.csv +++ b/configs/dc_line_types.csv @@ -1,2 +1,2 @@ country,v_nom,line_type -default,500.0,"HVDC XLPE 1000" \ No newline at end of file +default,500.0,"HVDC XLPE 1000" diff --git a/data/power/standard_types/line_types.csv b/data/power/standard_types/line_types.csv index c9d6421c52..be43914307 100644 --- a/data/power/standard_types/line_types.csv +++ b/data/power/standard_types/line_types.csv @@ -9,4 +9,4 @@ BO,"Penguin (44kV)",0.27 BO,"Penguin (69kV)",0.44 BO,"Ibis (115kV)",0.50 BO,"Rail (230kV)",0.43 -BO,"ACAR 750 y ACAR 1250 (500 kV)",0.96 \ No newline at end of file +BO,"ACAR 750 y ACAR 1250 (500 kV)",0.96 diff --git a/scripts/base_network.py b/scripts/base_network.py index 9e3c2572c2..e0f09f53cb 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -261,13 +261,15 @@ def _load_transformers_from_osm(fp_osm_transformers, buses): return transformers + def _load_regional_linetypes(line_types_csv): line_types = read_csv_nafix( - line_types_csv, - dtype=dict(country="str", v_nom="str", name="str", i_nom="str"), - ) + line_types_csv, + dtype=dict(country="str", v_nom="str", name="str", i_nom="str"), + ) return line_types + def _get_linetypes_config(line_types, voltages): """ Return the dictionary of linetypes for selected voltages. The dictionary is @@ -293,6 +295,7 @@ def _get_linetypes_config(line_types, voltages): ) return {k: v for k, v in line_types.items() if k in voltages} + def _load_lines_config(fl): line_config = read_csv_nafix( fl, From f8b0d392b07c18c0453f4d08eeabd6b0eba23efe Mon Sep 17 00:00:00 2001 From: ekatef Date: Sun, 16 Nov 2025 19:21:28 +0100 Subject: [PATCH 08/42] Get back custom line definition --- config.default.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/config.default.yaml b/config.default.yaml index 6e71aa3de0..832c0809f4 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -223,6 +223,16 @@ electricity: PV: [solar] lines: + type_source: "automated" # "custom" or "automated" + ac_types: + 132.: "243-AL1/39-ST1A 20.0" + 220.: "Al/St 240/40 2-bundle 220.0" + 300.: "Al/St 240/40 3-bundle 300.0" + 380.: "Al/St 240/40 4-bundle 380.0" + 500.: "Al/St 240/40 4-bundle 380.0" + 750.: "Al/St 560/50 4-bundle 750.0" + dc_types: + 500.: "HVDC XLPE 1000" s_max_pu: 0.7 s_nom_max: .inf s_nom_max_min: -.inf From ad14299c17b75785a24fc41f81746b07b9fd0c22 Mon Sep 17 00:00:00 2001 From: ekatef Date: Sun, 16 Nov 2025 19:36:12 +0100 Subject: [PATCH 09/42] Add voltage field --- data/power/standard_types/line_types.csv | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/data/power/standard_types/line_types.csv b/data/power/standard_types/line_types.csv index c9d6421c52..d13f15f0cd 100644 --- a/data/power/standard_types/line_types.csv +++ b/data/power/standard_types/line_types.csv @@ -1,12 +1,12 @@ country,v_nom,name,i_nom -CO,"Not specified 100kV",0.47 -CO,"Not specified 115.0",0.30 -CO,"Not specified 220.0",0.78 -CO,"Not specified 230.0,",2.84 -CO,"Not specified 500.0",0.69 -BO,"Partridge (25kV)",0.31 -BO,"Penguin (44kV)",0.27 -BO,"Penguin (69kV)",0.44 -BO,"Ibis (115kV)",0.50 -BO,"Rail (230kV)",0.43 -BO,"ACAR 750 y ACAR 1250 (500 kV)",0.96 \ No newline at end of file +CO,110,"Not specified 100kV",0.47 +CO,115,"Not specified 115.0",0.30 +CO,220,"Not specified 220.0",0.78 +CO,230,"Not specified 230.0,",2.84 +CO,500,"Not specified 500.0",0.69 +BO,25,"Partridge (25kV)",0.31 +BO,44,"Penguin (44kV)",0.27 +BO,69,"Penguin (69kV)",0.44 +BO,115,"Ibis (115kV)",0.50 +BO,230,"Rail (230kV)",0.43 +BO,500,"ACAR 750 y ACAR 1250 (500 kV)",0.96 \ No newline at end of file From bd33ae5fc2c9df8ad78a6baaabbdcfe74288e1d0 Mon Sep 17 00:00:00 2001 From: ekatef Date: Sun, 16 Nov 2025 19:47:06 +0100 Subject: [PATCH 10/42] Fix naming --- config.default.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.default.yaml b/config.default.yaml index 832c0809f4..ea035bf499 100644 --- a/config.default.yaml +++ b/config.default.yaml @@ -223,7 +223,7 @@ electricity: PV: [solar] lines: - type_source: "automated" # "custom" or "automated" + type_source: "automatic" # "custom" or "automatic" ac_types: 132.: "243-AL1/39-ST1A 20.0" 220.: "Al/St 240/40 2-bundle 220.0" From c26c8cc138c41e8320e0dd53fc2d51e9279918e2 Mon Sep 17 00:00:00 2001 From: ekatef Date: Sun, 16 Nov 2025 20:24:57 +0100 Subject: [PATCH 11/42] Revise naming --- Snakefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Snakefile b/Snakefile index 0a28620cc7..8f85dd84df 100644 --- a/Snakefile +++ b/Snakefile @@ -294,8 +294,8 @@ rule base_network: country_shapes="resources/" + RDIR + "shapes/country_shapes.geojson", offshore_shapes="resources/" + RDIR + "shapes/offshore_shapes.geojson", line_types="data/power/standard_types/line_types.csv", - lines_ac_config="configs/ac_line_types.csv", - lines_dc_config="configs/dc_line_types.csv", + region_linetypes_ac="configs/ac_line_types.csv", + region_linetupes_dc="configs/dc_line_types.csv", output: "networks/" + RDIR + "base.nc", log: From b52814f96f1fa71808a245750cf478e6bfd1d0f3 Mon Sep 17 00:00:00 2001 From: ekatef Date: Sun, 16 Nov 2025 20:25:46 +0100 Subject: [PATCH 12/42] Revise naming --- scripts/base_network.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/base_network.py b/scripts/base_network.py index 9e3c2572c2..9547512387 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -293,7 +293,7 @@ def _get_linetypes_config(line_types, voltages): ) return {k: v for k, v in line_types.items() if k in voltages} -def _load_lines_config(fl): +def _load_linetypes_csv(fl): line_config = read_csv_nafix( fl, dtype=dict(country="str", v_nom="str", name="str"), From ba4bca911454a58091abce19aca255b4877ec9ec Mon Sep 17 00:00:00 2001 From: ekatef Date: Sun, 16 Nov 2025 20:26:33 +0100 Subject: [PATCH 13/42] Read linetypes input --- scripts/base_network.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/base_network.py b/scripts/base_network.py index 9547512387..0ee1db2111 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -497,6 +497,9 @@ def base_network( transformers_config, voltages_config, ): + linetypes_ac_csv = inputs["region_linetypes_ac"] + linetypes_dc_csv = inputs["region_linetupes_dc"] + buses = _load_buses_from_osm(inputs.osm_buses).reset_index(drop=True) lines = _load_lines_from_osm(inputs.osm_lines).reset_index(drop=True) transformers = _load_transformers_from_osm(inputs.osm_transformers, buses) From 235d57d14c9671b1f1b37496ae70466bc334f7bd Mon Sep 17 00:00:00 2001 From: ekatef Date: Sun, 16 Nov 2025 20:27:44 +0100 Subject: [PATCH 14/42] Fix refuse --- scripts/base_network.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/base_network.py b/scripts/base_network.py index 0ee1db2111..7853471694 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -505,8 +505,6 @@ def base_network( transformers = _load_transformers_from_osm(inputs.osm_transformers, buses) converters = _load_converters_from_osm(inputs.osm_converters, buses) - region_line_types = _load_regional_linetypes(inputs.line_types) - lines_ac = lines[~lines.dc].copy() lines_dc = lines[lines.dc].copy() lines_ac = _set_electrical_parameters_lines(lines_config, voltages_config, lines_ac) From e18a3f2587205ad3bf680ade4613bb35ad1a05ac Mon Sep 17 00:00:00 2001 From: ekatef Date: Sun, 16 Nov 2025 20:28:11 +0100 Subject: [PATCH 15/42] Fix an arguments list --- scripts/base_network.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/base_network.py b/scripts/base_network.py index 7853471694..35082a4c00 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -323,7 +323,7 @@ def _get_linetype_by_voltage(v_nom, d_linetypes): return line_type_min -def _set_electrical_parameters_lines(lines_config, lines, lines_ac_csv): +def _set_electrical_parameters_lines(lines_config, voltages, lines, linetypes_ac_csv): if lines.empty: lines["type"] = [] return lines From af1d8d090bd417b51f5d2359cd852823d83b155d Mon Sep 17 00:00:00 2001 From: ekatef Date: Sun, 16 Nov 2025 20:29:02 +0100 Subject: [PATCH 16/42] Add short docstring --- scripts/base_network.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts/base_network.py b/scripts/base_network.py index 35082a4c00..f58d1b5211 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -294,6 +294,9 @@ def _get_linetypes_config(line_types, voltages): return {k: v for k, v in line_types.items() if k in voltages} def _load_linetypes_csv(fl): + """ + Load regional-specific linetypes + """ line_config = read_csv_nafix( fl, dtype=dict(country="str", v_nom="str", name="str"), @@ -324,6 +327,9 @@ def _get_linetype_by_voltage(v_nom, d_linetypes): def _set_electrical_parameters_lines(lines_config, voltages, lines, linetypes_ac_csv): + """ + Set transmission capacity of AC lines + """ if lines.empty: lines["type"] = [] return lines From e25ed971c18325e5a6279b1850c576fd4d1d6ef3 Mon Sep 17 00:00:00 2001 From: ekatef Date: Sun, 16 Nov 2025 20:30:05 +0100 Subject: [PATCH 17/42] Enable dual options in linetypes definitions --- scripts/base_network.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/scripts/base_network.py b/scripts/base_network.py index f58d1b5211..6eb6cb9339 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -334,7 +334,14 @@ def _set_electrical_parameters_lines(lines_config, voltages, lines, linetypes_ac lines["type"] = [] return lines - linetypes = _load_lines_config(input.lines_ac_config) + line_types_source = lines_config.get("type_source", "automated") + if line_types_source == "custom": + custom_types = lines_config.get("ac_types") + linetypes = _get_linetypes_config(custom_types, voltages) + else: + # TODO Check what happens if requested voltages + # are not included into `linetypes_ac_csv` specification + linetypes = _load_linetypes_csv(linetypes_ac_csv) lines["carrier"] = "AC" lines["dc"] = False From 6abffdf5ba8662ff6cb71048aeb09979c9d060fd Mon Sep 17 00:00:00 2001 From: ekatef Date: Sun, 16 Nov 2025 20:30:37 +0100 Subject: [PATCH 18/42] Fix an argument list --- scripts/base_network.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/base_network.py b/scripts/base_network.py index 6eb6cb9339..bbf48ede03 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -355,7 +355,7 @@ def _set_electrical_parameters_lines(lines_config, voltages, lines, linetypes_ac return lines -def _set_electrical_parameters_dc_lines(lines_config, lines): +def _set_electrical_parameters_dc_lines(lines_config, voltages, lines, linetypes_dc_csv): if lines.empty: lines["type"] = [] return lines From 5462f8cc233b799c45a7c5545c48299f6e593c2a Mon Sep 17 00:00:00 2001 From: ekatef Date: Sun, 16 Nov 2025 20:31:06 +0100 Subject: [PATCH 19/42] Enable dual options in linetypes for DC --- scripts/base_network.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/scripts/base_network.py b/scripts/base_network.py index bbf48ede03..d97542dcbe 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -359,8 +359,15 @@ def _set_electrical_parameters_dc_lines(lines_config, voltages, lines, linetypes if lines.empty: lines["type"] = [] return lines - - linetypes = _load_lines_config(input.lines_dc_config) + + line_types_source = lines_config.get("type_source", "automated") + if line_types_source == "custom": + custom_types = lines_config.get("dc_types") + linetypes = _get_linetypes_config(custom_types, voltages) + else: + # TODO Check what happens if requested voltages + # are not included into `linetypes_ac_csv` specification + linetypes = _load_linetypes_csv(linetypes_dc_csv) lines["carrier"] = "DC" lines["dc"] = True From 10e8a417988299ac15b9e18314b91d6f465b679e Mon Sep 17 00:00:00 2001 From: ekatef Date: Sun, 16 Nov 2025 20:31:52 +0100 Subject: [PATCH 20/42] Update calculations for lines --- scripts/base_network.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/scripts/base_network.py b/scripts/base_network.py index d97542dcbe..a0cec61d70 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -527,10 +527,18 @@ def base_network( lines_ac = lines[~lines.dc].copy() lines_dc = lines[lines.dc].copy() - lines_ac = _set_electrical_parameters_lines(lines_config, voltages_config, lines_ac) + lines_ac = _set_electrical_parameters_lines( + lines_config, + voltages_config, + lines_ac, + linetypes_ac_csv + ) lines_dc = _set_electrical_parameters_dc_lines( - lines_config, voltages_config, lines_dc + lines_config, + voltages_config, + lines_dc, + linetypes_ac_csv ) transformers = _set_electrical_parameters_transformers( From 7d48fbc833b015b8ef826214fc3b5127ceca9811 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 16 Nov 2025 19:34:19 +0000 Subject: [PATCH 21/42] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- scripts/base_network.py | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/scripts/base_network.py b/scripts/base_network.py index 803ecd8d79..45803b23a9 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -295,6 +295,7 @@ def _get_linetypes_config(line_types, voltages): ) return {k: v for k, v in line_types.items() if k in voltages} + def _load_linetypes_csv(fl): """ Load regional-specific linetypes @@ -341,7 +342,7 @@ def _set_electrical_parameters_lines(lines_config, voltages, lines, linetypes_ac custom_types = lines_config.get("ac_types") linetypes = _get_linetypes_config(custom_types, voltages) else: - # TODO Check what happens if requested voltages + # TODO Check what happens if requested voltages # are not included into `linetypes_ac_csv` specification linetypes = _load_linetypes_csv(linetypes_ac_csv) @@ -357,17 +358,19 @@ def _set_electrical_parameters_lines(lines_config, voltages, lines, linetypes_ac return lines -def _set_electrical_parameters_dc_lines(lines_config, voltages, lines, linetypes_dc_csv): +def _set_electrical_parameters_dc_lines( + lines_config, voltages, lines, linetypes_dc_csv +): if lines.empty: lines["type"] = [] return lines - + line_types_source = lines_config.get("type_source", "automated") if line_types_source == "custom": custom_types = lines_config.get("dc_types") linetypes = _get_linetypes_config(custom_types, voltages) else: - # TODO Check what happens if requested voltages + # TODO Check what happens if requested voltages # are not included into `linetypes_ac_csv` specification linetypes = _load_linetypes_csv(linetypes_dc_csv) @@ -530,17 +533,11 @@ def base_network( lines_ac = lines[~lines.dc].copy() lines_dc = lines[lines.dc].copy() lines_ac = _set_electrical_parameters_lines( - lines_config, - voltages_config, - lines_ac, - linetypes_ac_csv + lines_config, voltages_config, lines_ac, linetypes_ac_csv ) lines_dc = _set_electrical_parameters_dc_lines( - lines_config, - voltages_config, - lines_dc, - linetypes_ac_csv + lines_config, voltages_config, lines_dc, linetypes_ac_csv ) transformers = _set_electrical_parameters_transformers( From 1b2d1231adb23b140a78da620f97bbe5227dfdeb Mon Sep 17 00:00:00 2001 From: ekatef Date: Sun, 16 Nov 2025 22:49:33 +0100 Subject: [PATCH 22/42] Add details to docstring --- scripts/base_network.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/base_network.py b/scripts/base_network.py index 803ecd8d79..d98a040f0a 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -279,8 +279,8 @@ def _get_linetypes_config(line_types, voltages): Parameters ---------- line_types : dict - Dictionary of linetypes: keys are nominal voltages and values are linetypes. - voltages : list + Dictionary of linetypes: keys are float nominal voltages and values are string linetypes. + voltages : list of floats List of selected voltages. Returns From df4d8e82b289f2301318b6084e58de0f75f2868b Mon Sep 17 00:00:00 2001 From: ekatef Date: Sun, 16 Nov 2025 22:49:44 +0100 Subject: [PATCH 23/42] Fix types specification --- scripts/base_network.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/base_network.py b/scripts/base_network.py index d98a040f0a..d4b6dcd20b 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -301,7 +301,7 @@ def _load_linetypes_csv(fl): """ line_config = read_csv_nafix( fl, - dtype=dict(country="str", v_nom="str", name="str"), + dtype=dict(country="str", v_nom="float", name="str"), ) return line_config From d980284c7707f66e9d9737b61e5b3e3eaa155240 Mon Sep 17 00:00:00 2001 From: ekatef Date: Sun, 16 Nov 2025 22:50:12 +0100 Subject: [PATCH 24/42] Add filtering by countries --- scripts/base_network.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/scripts/base_network.py b/scripts/base_network.py index d4b6dcd20b..4ee8cd9288 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -328,7 +328,7 @@ def _get_linetype_by_voltage(v_nom, d_linetypes): return line_type_min -def _set_electrical_parameters_lines(lines_config, voltages, lines, linetypes_ac_csv): +def _set_electrical_parameters_lines(lines_config, voltages, lines, linetypes_ac_csv, countries): """ Set transmission capacity of AC lines """ @@ -344,6 +344,13 @@ def _set_electrical_parameters_lines(lines_config, voltages, lines, linetypes_ac # TODO Check what happens if requested voltages # are not included into `linetypes_ac_csv` specification linetypes = _load_linetypes_csv(linetypes_ac_csv) + # TODO Improve filtering for multiple countries + country_filter = countries[0] + + if country_filter in linetypes_df.country.values: + region_linetypes_df = linetypes_df.query("country == @country_filter") + else: + region_linetypes_df = linetypes_df.query("country == 'default'") lines["carrier"] = "AC" lines["dc"] = False From ad17e415b92696393a4f5e330571fa7bf007e0db Mon Sep 17 00:00:00 2001 From: ekatef Date: Sun, 16 Nov 2025 22:50:38 +0100 Subject: [PATCH 25/42] Improve structure --- scripts/base_network.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/scripts/base_network.py b/scripts/base_network.py index 4ee8cd9288..bbb486a685 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -338,12 +338,9 @@ def _set_electrical_parameters_lines(lines_config, voltages, lines, linetypes_ac line_types_source = lines_config.get("type_source", "automated") if line_types_source == "custom": - custom_types = lines_config.get("ac_types") - linetypes = _get_linetypes_config(custom_types, voltages) + requested_types = lines_config.get("ac_types") else: - # TODO Check what happens if requested voltages - # are not included into `linetypes_ac_csv` specification - linetypes = _load_linetypes_csv(linetypes_ac_csv) + linetypes_df = _load_linetypes_csv(linetypes_ac_csv) # TODO Improve filtering for multiple countries country_filter = countries[0] @@ -352,6 +349,12 @@ def _set_electrical_parameters_lines(lines_config, voltages, lines, linetypes_ac else: region_linetypes_df = linetypes_df.query("country == 'default'") + requested_types = dict( + zip(region_linetypes_df.v_nom, region_linetypes_df.line_type) + ) + + linetypes = _get_linetypes_config(requested_types, voltages) + lines["carrier"] = "AC" lines["dc"] = False From ee3b3e7f1b15c1ccea6226255a468fa105e64bc3 Mon Sep 17 00:00:00 2001 From: ekatef Date: Sun, 16 Nov 2025 22:51:28 +0100 Subject: [PATCH 26/42] Fix arguments --- scripts/base_network.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/base_network.py b/scripts/base_network.py index bbb486a685..fb65ace78b 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -367,7 +367,7 @@ def _set_electrical_parameters_lines(lines_config, voltages, lines, linetypes_ac return lines -def _set_electrical_parameters_dc_lines(lines_config, voltages, lines, linetypes_dc_csv): +def _set_electrical_parameters_dc_lines(lines_config, voltages, lines, linetypes_dc_csv, countries): if lines.empty: lines["type"] = [] return lines From c02be2a2c89e0918862aee5ddc4a63466fcfc738 Mon Sep 17 00:00:00 2001 From: ekatef Date: Sun, 16 Nov 2025 22:51:41 +0100 Subject: [PATCH 27/42] Add TODO --- scripts/base_network.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/base_network.py b/scripts/base_network.py index fb65ace78b..579ae4e1b3 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -288,6 +288,7 @@ def _get_linetypes_config(line_types, voltages): Dictionary of linetypes for selected voltages. """ # get voltages value that are not available in the line types + # TODO Account for the case when no voltages are available in line_types dictionary vnoms_diff = set(voltages).symmetric_difference(set(line_types.keys())) if vnoms_diff: logger.warning( From 2ece751d1cc810f145ac2e5aa9d7b3ce25d92b22 Mon Sep 17 00:00:00 2001 From: ekatef Date: Sun, 16 Nov 2025 22:52:01 +0100 Subject: [PATCH 28/42] Fix arguments list --- scripts/base_network.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/base_network.py b/scripts/base_network.py index 579ae4e1b3..d808e660ea 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -544,14 +544,16 @@ def base_network( lines_config, voltages_config, lines_ac, - linetypes_ac_csv + linetypes_ac_csv, + countries ) lines_dc = _set_electrical_parameters_dc_lines( lines_config, voltages_config, lines_dc, - linetypes_ac_csv + linetypes_ac_csv, + countries ) transformers = _set_electrical_parameters_transformers( From 9bea88eff5dfa548d69eb18ac04b3efaa0338a8d Mon Sep 17 00:00:00 2001 From: ekatef Date: Sun, 16 Nov 2025 23:03:36 +0100 Subject: [PATCH 29/42] Fix typo --- Snakefile | 2 +- scripts/base_network.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Snakefile b/Snakefile index 8f85dd84df..2b4cebb624 100644 --- a/Snakefile +++ b/Snakefile @@ -295,7 +295,7 @@ rule base_network: offshore_shapes="resources/" + RDIR + "shapes/offshore_shapes.geojson", line_types="data/power/standard_types/line_types.csv", region_linetypes_ac="configs/ac_line_types.csv", - region_linetupes_dc="configs/dc_line_types.csv", + region_linetypes_dc="configs/dc_line_types.csv", output: "networks/" + RDIR + "base.nc", log: diff --git a/scripts/base_network.py b/scripts/base_network.py index d808e660ea..2955908f41 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -531,7 +531,7 @@ def base_network( voltages_config, ): linetypes_ac_csv = inputs["region_linetypes_ac"] - linetypes_dc_csv = inputs["region_linetupes_dc"] + linetypes_dc_csv = inputs["region_linetypes_dc"] buses = _load_buses_from_osm(inputs.osm_buses).reset_index(drop=True) lines = _load_lines_from_osm(inputs.osm_lines).reset_index(drop=True) From b9c35c79ee69ab415237036a1a1561498b63b376 Mon Sep 17 00:00:00 2001 From: ekatef Date: Sun, 16 Nov 2025 23:04:00 +0100 Subject: [PATCH 30/42] Load global linetypes --- Snakefile | 1 + scripts/base_network.py | 1 + 2 files changed, 2 insertions(+) diff --git a/Snakefile b/Snakefile index 2b4cebb624..77027d9521 100644 --- a/Snakefile +++ b/Snakefile @@ -296,6 +296,7 @@ rule base_network: line_types="data/power/standard_types/line_types.csv", region_linetypes_ac="configs/ac_line_types.csv", region_linetypes_dc="configs/dc_line_types.csv", + global_linetypes="data/power/standard_types/line_types.csv", output: "networks/" + RDIR + "base.nc", log: diff --git a/scripts/base_network.py b/scripts/base_network.py index 2955908f41..f718d72f14 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -532,6 +532,7 @@ def base_network( ): linetypes_ac_csv = inputs["region_linetypes_ac"] linetypes_dc_csv = inputs["region_linetypes_dc"] + global_linetypes = inputs["global_linetypes"] buses = _load_buses_from_osm(inputs.osm_buses).reset_index(drop=True) lines = _load_lines_from_osm(inputs.osm_lines).reset_index(drop=True) From 9a36c26449ee48016e1b5252d979d719bd40079f Mon Sep 17 00:00:00 2001 From: ekatef Date: Sun, 16 Nov 2025 23:04:38 +0100 Subject: [PATCH 31/42] Use global linetypes --- scripts/base_network.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/scripts/base_network.py b/scripts/base_network.py index f718d72f14..dcd8083566 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -432,8 +432,9 @@ def _set_electrical_parameters_converters(links_config, converters): return converters -def _set_lines_s_nom_from_linetypes(n): - # Info: n.line_types is a lineregister from pypsa/pandapowers +def _set_lines_s_nom_from_linetypes(n, global_linetypes, countries): + # NB: n.line_types is a lineregister from pypsa/pandapowers + global_linetypes_df = _load_linetypes_csv(global_linetypes) n.lines["s_nom"] = ( np.sqrt(3) * n.lines["type"].map(n.line_types.i_nom) @@ -587,7 +588,7 @@ def base_network( n.import_components_from_dataframe(transformers, "Transformer") n.import_components_from_dataframe(converters, "Link") - _set_lines_s_nom_from_linetypes(n) + _set_lines_s_nom_from_linetypes(n, global_linetypes, countries) _set_countries_and_substations(inputs, base_network_config, countries_config, n) From 08e6732bc51e87ab850432326f65b949244bf536 Mon Sep 17 00:00:00 2001 From: ekatef Date: Sun, 16 Nov 2025 23:04:57 +0100 Subject: [PATCH 32/42] Add filtering by countries --- scripts/base_network.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/scripts/base_network.py b/scripts/base_network.py index dcd8083566..84e62cf92f 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -435,6 +435,16 @@ def _set_electrical_parameters_converters(links_config, converters): def _set_lines_s_nom_from_linetypes(n, global_linetypes, countries): # NB: n.line_types is a lineregister from pypsa/pandapowers global_linetypes_df = _load_linetypes_csv(global_linetypes) + + # TODO Improve filtering and remove duplication + country_filter = countries[0] + if country_filter in global_linetypes_df.country.values: + region_linetypes_df = global_linetypes_df.query("country == @country_filter") + else: + region_linetypes_df = global_linetypes_df.query("country == 'default'") + + line_type_series = n.line_types.i_nom.copy() + n.lines["s_nom"] = ( np.sqrt(3) * n.lines["type"].map(n.line_types.i_nom) From 13636a2d4ea55e2d25fdc52375a22b97a294a276 Mon Sep 17 00:00:00 2001 From: ekatef Date: Sun, 16 Nov 2025 23:05:09 +0100 Subject: [PATCH 33/42] Add TODOs --- scripts/base_network.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/base_network.py b/scripts/base_network.py index 84e62cf92f..905e81b0c3 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -447,6 +447,7 @@ def _set_lines_s_nom_from_linetypes(n, global_linetypes, countries): n.lines["s_nom"] = ( np.sqrt(3) + # TODO Fix i_nom for regional types * n.lines["type"].map(n.line_types.i_nom) * n.lines.eval("v_nom * num_parallel") ) @@ -588,6 +589,7 @@ def base_network( lines_dc = _set_electrical_parameters_links(links_config, lines_dc) # parse line information into p_nom required for converters lines_dc["p_nom"] = lines_dc.apply( + # TODO Account for the regional specifics lambda x: x["v_nom"] * n.line_types.i_nom[x["type"]], axis=1, result_type="reduce", From 1afcb9d455aaac33de816685e0e81d8b9d49c861 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 16 Nov 2025 22:08:16 +0000 Subject: [PATCH 34/42] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- scripts/base_network.py | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/scripts/base_network.py b/scripts/base_network.py index 5650be1955..2e78337e1b 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -330,7 +330,9 @@ def _get_linetype_by_voltage(v_nom, d_linetypes): return line_type_min -def _set_electrical_parameters_lines(lines_config, voltages, lines, linetypes_ac_csv, countries): +def _set_electrical_parameters_lines( + lines_config, voltages, lines, linetypes_ac_csv, countries +): """ Set transmission capacity of AC lines """ @@ -349,12 +351,12 @@ def _set_electrical_parameters_lines(lines_config, voltages, lines, linetypes_ac if country_filter in linetypes_df.country.values: region_linetypes_df = linetypes_df.query("country == @country_filter") else: - region_linetypes_df = linetypes_df.query("country == 'default'") + region_linetypes_df = linetypes_df.query("country == 'default'") requested_types = dict( zip(region_linetypes_df.v_nom, region_linetypes_df.line_type) ) - + linetypes = _get_linetypes_config(requested_types, voltages) lines["carrier"] = "AC" @@ -369,7 +371,9 @@ def _set_electrical_parameters_lines(lines_config, voltages, lines, linetypes_ac return lines -def _set_electrical_parameters_dc_lines(lines_config, voltages, lines, linetypes_dc_csv, countries): +def _set_electrical_parameters_dc_lines( + lines_config, voltages, lines, linetypes_dc_csv, countries +): if lines.empty: lines["type"] = [] return lines @@ -442,7 +446,7 @@ def _set_lines_s_nom_from_linetypes(n, global_linetypes, countries): if country_filter in global_linetypes_df.country.values: region_linetypes_df = global_linetypes_df.query("country == @country_filter") else: - region_linetypes_df = global_linetypes_df.query("country == 'default'") + region_linetypes_df = global_linetypes_df.query("country == 'default'") line_type_series = n.line_types.i_nom.copy() @@ -555,19 +559,11 @@ def base_network( lines_ac = lines[~lines.dc].copy() lines_dc = lines[lines.dc].copy() lines_ac = _set_electrical_parameters_lines( - lines_config, - voltages_config, - lines_ac, - linetypes_ac_csv, - countries + lines_config, voltages_config, lines_ac, linetypes_ac_csv, countries ) lines_dc = _set_electrical_parameters_dc_lines( - lines_config, - voltages_config, - lines_dc, - linetypes_ac_csv, - countries + lines_config, voltages_config, lines_dc, linetypes_ac_csv, countries ) transformers = _set_electrical_parameters_transformers( From 46c9cd42394ed3f84e562e111ac2060c51ae1229 Mon Sep 17 00:00:00 2001 From: ekatef Date: Tue, 18 Nov 2025 12:31:14 +0100 Subject: [PATCH 35/42] Replace default lines specification with the regional one --- scripts/base_network.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/base_network.py b/scripts/base_network.py index 5650be1955..8e36ec4e3c 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -446,10 +446,13 @@ def _set_lines_s_nom_from_linetypes(n, global_linetypes, countries): line_type_series = n.line_types.i_nom.copy() + regional_types_df = global_linetypes_df.set_index("name") + n.lines["s_nom"] = ( np.sqrt(3) # TODO Fix i_nom for regional types - * n.lines["type"].map(n.line_types.i_nom) + #* n.lines["type"].map(n.line_types.i_nom) + * n.lines["type"].map(regional_types_df.i_nom) * n.lines.eval("v_nom * num_parallel") ) # Re-define s_nom for DC lines From d5dcbced58e37f26053e1b0bc1040cbe565f5ad6 Mon Sep 17 00:00:00 2001 From: ekatef Date: Tue, 18 Nov 2025 21:20:18 +0100 Subject: [PATCH 36/42] Fix naming --- data/power/standard_types/line_types.csv | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/data/power/standard_types/line_types.csv b/data/power/standard_types/line_types.csv index 24b1311e9e..125df0e612 100644 --- a/data/power/standard_types/line_types.csv +++ b/data/power/standard_types/line_types.csv @@ -1,9 +1,9 @@ country,v_nom,name,i_nom CO,110,"Not specified 100kV",0.47 -CO,115,"Not specified 115.0",0.30 -CO,220,"Not specified 220.0",0.78 -CO,230,"Not specified 230.0,",2.84 -CO,500,"Not specified 500.0",0.69 +CO,115,"Not specified 115kV",0.30 +CO,220,"Not specified 220kV",0.78 +CO,230,"Not specified 230kV,",2.84 +CO,500,"Not specified 500kV",0.69 BO,25,"Partridge (25kV)",0.31 BO,44,"Penguin (44kV)",0.27 BO,69,"Penguin (69kV)",0.44 From 2903454f4c59c8a60e5dd02df4bdf8794521b7e7 Mon Sep 17 00:00:00 2001 From: ekatef Date: Tue, 18 Nov 2025 21:45:56 +0100 Subject: [PATCH 37/42] Fix formatting --- configs/ac_line_types.csv | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/configs/ac_line_types.csv b/configs/ac_line_types.csv index 5312d77655..39e4904076 100644 --- a/configs/ac_line_types.csv +++ b/configs/ac_line_types.csv @@ -6,9 +6,10 @@ BO,115.0,"Ibis (115kV)" BO,230.0,"Rail (230kV)" BO,500.0,"ACAR 750 y ACAR 1250 (500 kV)" CO,110.0,"Not specified 100kV" -CO,115.0,"Not specified 115.0" -CO,220.0,"Not specified 220.0" -CO,230.0,"Not specified 230.0" +CO,115.0,"Not specified 115kV" +CO,220.0,"Not specified 220kV" +CO,230.0,"Not specified 230kV" +CO,230.0,"Not specified 500kV" default,132.0,"243-AL1/39-ST1A 20.0" default,220.0,"Al/St 240/40 2-bundle 220.0" default,300.0,"Al/St 240/40 3-bundle 300.0" From 9818cb4aa38e891942744304a30655700ffd6b39 Mon Sep 17 00:00:00 2001 From: ekatef Date: Tue, 18 Nov 2025 21:46:13 +0100 Subject: [PATCH 38/42] Fix series name --- scripts/base_network.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/base_network.py b/scripts/base_network.py index e226589de8..d8a285df55 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -450,13 +450,13 @@ def _set_lines_s_nom_from_linetypes(n, global_linetypes, countries): line_type_series = n.line_types.i_nom.copy() - regional_types_df = global_linetypes_df.set_index("name") + regional_types_df = region_linetypes_df.set_index("name") n.lines["s_nom"] = ( np.sqrt(3) # TODO Fix i_nom for regional types #* n.lines["type"].map(n.line_types.i_nom) - * n.lines["type"].map(regional_types_df.i_nom) + * n.lines["type"].map(regional_types_df.i_nom.rename("type")) * n.lines.eval("v_nom * num_parallel") ) # Re-define s_nom for DC lines From 3e435eff13ce6561bb772d6c4364937e07463372 Mon Sep 17 00:00:00 2001 From: ekatef Date: Tue, 18 Nov 2025 21:46:21 +0100 Subject: [PATCH 39/42] Add TODO --- scripts/base_network.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/base_network.py b/scripts/base_network.py index d8a285df55..a0afb5e2ec 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -448,6 +448,7 @@ def _set_lines_s_nom_from_linetypes(n, global_linetypes, countries): else: region_linetypes_df = global_linetypes_df.query("country == 'default'") + # TODO integrate in-built PyPSA types line_type_series = n.line_types.i_nom.copy() regional_types_df = region_linetypes_df.set_index("name") @@ -614,7 +615,7 @@ def base_network( if "snakemake" not in globals(): from _helpers import mock_snakemake - snakemake = mock_snakemake("base_network") + snakemake = mock_snakemake("base_network", configfile="configs/scenarios/config.co.test.yaml" ) configure_logging(snakemake) From 3def71b417a2382a539f588b3f5516453b9e1d8f Mon Sep 17 00:00:00 2001 From: ekatef Date: Tue, 18 Nov 2025 23:22:54 +0100 Subject: [PATCH 40/42] Fix typo --- configs/ac_line_types.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/ac_line_types.csv b/configs/ac_line_types.csv index 39e4904076..67e32ec00c 100644 --- a/configs/ac_line_types.csv +++ b/configs/ac_line_types.csv @@ -9,7 +9,7 @@ CO,110.0,"Not specified 100kV" CO,115.0,"Not specified 115kV" CO,220.0,"Not specified 220kV" CO,230.0,"Not specified 230kV" -CO,230.0,"Not specified 500kV" +CO,500.0,"Not specified 500kV" default,132.0,"243-AL1/39-ST1A 20.0" default,220.0,"Al/St 240/40 2-bundle 220.0" default,300.0,"Al/St 240/40 3-bundle 300.0" From 793b77f20501cef81abeb056ee81406517c2e248 Mon Sep 17 00:00:00 2001 From: ekatef Date: Tue, 18 Nov 2025 23:23:04 +0100 Subject: [PATCH 41/42] Adjust values --- data/power/standard_types/line_types.csv | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data/power/standard_types/line_types.csv b/data/power/standard_types/line_types.csv index 125df0e612..84fee768ce 100644 --- a/data/power/standard_types/line_types.csv +++ b/data/power/standard_types/line_types.csv @@ -1,9 +1,9 @@ country,v_nom,name,i_nom -CO,110,"Not specified 100kV",0.47 +CO,110,"Not specified 100kV",0.68 CO,115,"Not specified 115kV",0.30 CO,220,"Not specified 220kV",0.78 -CO,230,"Not specified 230kV,",2.84 -CO,500,"Not specified 500kV",0.69 +CO,230,"Not specified 230kV",2 +CO,500,"Not specified 500kV",1.32 BO,25,"Partridge (25kV)",0.31 BO,44,"Penguin (44kV)",0.27 BO,69,"Penguin (69kV)",0.44 From fa781f364842d02c3a54738e22a02ab84a0da425 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 18 Nov 2025 22:24:18 +0000 Subject: [PATCH 42/42] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- scripts/base_network.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/base_network.py b/scripts/base_network.py index a0afb5e2ec..f53dc011e7 100644 --- a/scripts/base_network.py +++ b/scripts/base_network.py @@ -456,7 +456,7 @@ def _set_lines_s_nom_from_linetypes(n, global_linetypes, countries): n.lines["s_nom"] = ( np.sqrt(3) # TODO Fix i_nom for regional types - #* n.lines["type"].map(n.line_types.i_nom) + # * n.lines["type"].map(n.line_types.i_nom) * n.lines["type"].map(regional_types_df.i_nom.rename("type")) * n.lines.eval("v_nom * num_parallel") ) @@ -615,7 +615,9 @@ def base_network( if "snakemake" not in globals(): from _helpers import mock_snakemake - snakemake = mock_snakemake("base_network", configfile="configs/scenarios/config.co.test.yaml" ) + snakemake = mock_snakemake( + "base_network", configfile="configs/scenarios/config.co.test.yaml" + ) configure_logging(snakemake)