flextool 4.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. flextool/__init__.py +41 -0
  2. flextool/_mem_sampler.py +193 -0
  3. flextool/_resources.py +43 -0
  4. flextool/calibrate/__init__.py +51 -0
  5. flextool/calibrate/__main__.py +11 -0
  6. flextool/calibrate/_cli.py +316 -0
  7. flextool/calibrate/_db_alt.py +166 -0
  8. flextool/calibrate/_final_outputs.py +110 -0
  9. flextool/calibrate/_guard.py +151 -0
  10. flextool/calibrate/_loop.py +558 -0
  11. flextool/calibrate/_readers.py +223 -0
  12. flextool/calibrate/_report.py +263 -0
  13. flextool/calibrate/_sizing.py +699 -0
  14. flextool/calibrate/_solve.py +134 -0
  15. flextool/calibrate/_solve_status.py +495 -0
  16. flextool/cli/__init__.py +9 -0
  17. flextool/cli/_console.py +51 -0
  18. flextool/cli/_timing.py +147 -0
  19. flextool/cli/cmd_execute_flextool_workflow.py +187 -0
  20. flextool/cli/cmd_export_to_tabular.py +56 -0
  21. flextool/cli/cmd_import_sensitivities.py +75 -0
  22. flextool/cli/cmd_migrate_database.py +13 -0
  23. flextool/cli/cmd_open_results_db.py +269 -0
  24. flextool/cli/cmd_read_matpower.py +66 -0
  25. flextool/cli/cmd_read_old_flextool.py +63 -0
  26. flextool/cli/cmd_read_self_describing_tabular_input.py +50 -0
  27. flextool/cli/cmd_read_tabular_input.py +81 -0
  28. flextool/cli/cmd_run_flextool.py +1095 -0
  29. flextool/cli/cmd_scenario_results.py +284 -0
  30. flextool/cli/cmd_solve_mps.py +169 -0
  31. flextool/cli/cmd_update_flextool.py +17 -0
  32. flextool/cli/cmd_write_outputs.py +125 -0
  33. flextool/common_utils/__init__.py +1 -0
  34. flextool/common_utils/plot_mem_shape.py +77 -0
  35. flextool/common_utils/precision.py +451 -0
  36. flextool/decomposition/__init__.py +0 -0
  37. flextool/decomposition/region_decomposition.py +128 -0
  38. flextool/decomposition/region_filter.py +1261 -0
  39. flextool/engine_polars/__init__.py +110 -0
  40. flextool/engine_polars/_axis_enums.py +742 -0
  41. flextool/engine_polars/_benders.py +3462 -0
  42. flextool/engine_polars/_block_layout.py +1479 -0
  43. flextool/engine_polars/_blocks.py +1515 -0
  44. flextool/engine_polars/_commodity_ladder.py +660 -0
  45. flextool/engine_polars/_cumulative_invest.py +1165 -0
  46. flextool/engine_polars/_db_loader.py +153 -0
  47. flextool/engine_polars/_db_reader.py +127 -0
  48. flextool/engine_polars/_dc_power_flow.py +445 -0
  49. flextool/engine_polars/_delay.py +442 -0
  50. flextool/engine_polars/_derived_arithmetic.py +432 -0
  51. flextool/engine_polars/_derived_block.py +990 -0
  52. flextool/engine_polars/_derived_branch.py +769 -0
  53. flextool/engine_polars/_derived_existing.py +1353 -0
  54. flextool/engine_polars/_derived_npv.py +1297 -0
  55. flextool/engine_polars/_derived_params.py +9850 -0
  56. flextool/engine_polars/_derived_profile.py +881 -0
  57. flextool/engine_polars/_derived_walks.py +276 -0
  58. flextool/engine_polars/_determinism.py +70 -0
  59. flextool/engine_polars/_direct_params.py +2186 -0
  60. flextool/engine_polars/_dump_csvs.py +1009 -0
  61. flextool/engine_polars/_emit_arc_unions.py +1631 -0
  62. flextool/engine_polars/_emit_calc_params.py +729 -0
  63. flextool/engine_polars/_emit_chain_params.py +709 -0
  64. flextool/engine_polars/_emit_co2_accumulators.py +400 -0
  65. flextool/engine_polars/_emit_dispatchers.py +690 -0
  66. flextool/engine_polars/_emit_energy_margin.py +125 -0
  67. flextool/engine_polars/_emit_energy_margin_adder.py +290 -0
  68. flextool/engine_polars/_emit_entity_annual.py +428 -0
  69. flextool/engine_polars/_emit_inflow_scaling.py +1420 -0
  70. flextool/engine_polars/_emit_leaf_sets.py +550 -0
  71. flextool/engine_polars/_emit_lp_scaling.py +665 -0
  72. flextool/engine_polars/_emit_mid_sets.py +859 -0
  73. flextool/engine_polars/_emit_pdt_params.py +759 -0
  74. flextool/engine_polars/_emit_per_solve.py +774 -0
  75. flextool/engine_polars/_emit_period_calc.py +504 -0
  76. flextool/engine_polars/_emit_period_params.py +2398 -0
  77. flextool/engine_polars/_emit_provider_io.py +141 -0
  78. flextool/engine_polars/_emit_reserve.py +574 -0
  79. flextool/engine_polars/_emit_solve_time.py +311 -0
  80. flextool/engine_polars/_emit_solve_writers.py +1249 -0
  81. flextool/engine_polars/_flex_data_accumulator.py +388 -0
  82. flextool/engine_polars/_flex_data_provider.py +478 -0
  83. flextool/engine_polars/_group_slack.py +1253 -0
  84. flextool/engine_polars/_inmemory_reader.py +140 -0
  85. flextool/engine_polars/_input_source.py +336 -0
  86. flextool/engine_polars/_invest_seeds.py +191 -0
  87. flextool/engine_polars/_native_input_writer.py +100 -0
  88. flextool/engine_polars/_native_run_model.py +1348 -0
  89. flextool/engine_polars/_orchestration.py +4314 -0
  90. flextool/engine_polars/_output_writer.py +439 -0
  91. flextool/engine_polars/_param_shapes.py +1595 -0
  92. flextool/engine_polars/_parquet_bundle.py +723 -0
  93. flextool/engine_polars/_pdt_join.py +167 -0
  94. flextool/engine_polars/_pdt_lookup.py +547 -0
  95. flextool/engine_polars/_per_solve_sets.py +335 -0
  96. flextool/engine_polars/_projection_params.py +2056 -0
  97. flextool/engine_polars/_provider_keys.py +173 -0
  98. flextool/engine_polars/_provider_translators.py +225 -0
  99. flextool/engine_polars/_recursive_solve.py +703 -0
  100. flextool/engine_polars/_region_filter.py +2508 -0
  101. flextool/engine_polars/_reserve.py +649 -0
  102. flextool/engine_polars/_solve_acceptance.py +331 -0
  103. flextool/engine_polars/_solve_config.py +1001 -0
  104. flextool/engine_polars/_solve_context.py +885 -0
  105. flextool/engine_polars/_solve_handoff.py +164 -0
  106. flextool/engine_polars/_solve_state.py +232 -0
  107. flextool/engine_polars/_solver_base.py +36 -0
  108. flextool/engine_polars/_solver_dispatch.py +511 -0
  109. flextool/engine_polars/_spinedb_reader.py +1165 -0
  110. flextool/engine_polars/_stochastic.py +593 -0
  111. flextool/engine_polars/_subprocess_solve.py +1838 -0
  112. flextool/engine_polars/_timeline.py +1416 -0
  113. flextool/engine_polars/_vectorize.py +438 -0
  114. flextool/engine_polars/_warm.py +858 -0
  115. flextool/engine_polars/autoscale/__init__.py +107 -0
  116. flextool/engine_polars/autoscale/_config.py +218 -0
  117. flextool/engine_polars/autoscale/_layer2.py +1253 -0
  118. flextool/engine_polars/autoscale/_layer2_types.py +584 -0
  119. flextool/engine_polars/autoscale/_quantity_types.py +621 -0
  120. flextool/engine_polars/autoscale/_report.py +336 -0
  121. flextool/engine_polars/chain.py +259 -0
  122. flextool/engine_polars/input.py +6638 -0
  123. flextool/engine_polars/model.py +4754 -0
  124. flextool/env_check.py +388 -0
  125. flextool/export_to_tabular/__init__.py +5 -0
  126. flextool/export_to_tabular/db_reader.py +224 -0
  127. flextool/export_to_tabular/excel_writer.py +3559 -0
  128. flextool/export_to_tabular/export_settings.yaml +377 -0
  129. flextool/export_to_tabular/export_to_excel.py +227 -0
  130. flextool/export_to_tabular/formatting.py +543 -0
  131. flextool/export_to_tabular/sheet_config.py +876 -0
  132. flextool/gui/__init__.py +0 -0
  133. flextool/gui/__main__.py +118 -0
  134. flextool/gui/calibrate_commands.py +184 -0
  135. flextool/gui/calibrate_jobs.py +424 -0
  136. flextool/gui/check_tree.py +142 -0
  137. flextool/gui/cli_format.py +83 -0
  138. flextool/gui/config_parser.py +68 -0
  139. flextool/gui/data_models.py +362 -0
  140. flextool/gui/db_editor_integration.py +202 -0
  141. flextool/gui/db_version_check.py +269 -0
  142. flextool/gui/dialogs/__init__.py +0 -0
  143. flextool/gui/dialogs/add_dialog.py +1098 -0
  144. flextool/gui/dialogs/calibrate_dialog.py +1259 -0
  145. flextool/gui/dialogs/file_picker.py +473 -0
  146. flextool/gui/dialogs/group_picker.py +299 -0
  147. flextool/gui/dialogs/migration_consent_dialog.py +106 -0
  148. flextool/gui/dialogs/migration_progress_dialog.py +237 -0
  149. flextool/gui/dialogs/plot_dialog.py +459 -0
  150. flextool/gui/dialogs/plot_settings_picker.py +2184 -0
  151. flextool/gui/dialogs/project_dialog.py +426 -0
  152. flextool/gui/dialogs/update_dialog.py +212 -0
  153. flextool/gui/downsampling.py +88 -0
  154. flextool/gui/error_handling.py +50 -0
  155. flextool/gui/execution_manager.py +1715 -0
  156. flextool/gui/execution_window.py +1377 -0
  157. flextool/gui/hover_tooltip.py +111 -0
  158. flextool/gui/input_sources.py +730 -0
  159. flextool/gui/main_window.py +6181 -0
  160. flextool/gui/network_graph.py +215 -0
  161. flextool/gui/output_actions.py +393 -0
  162. flextool/gui/output_log_window.py +159 -0
  163. flextool/gui/platform_utils.py +421 -0
  164. flextool/gui/plot_cache.py +88 -0
  165. flextool/gui/plot_canvas.py +543 -0
  166. flextool/gui/plot_config_reader.py +272 -0
  167. flextool/gui/project_utils.py +100 -0
  168. flextool/gui/result_viewer.py +4394 -0
  169. flextool/gui/scenario_key.py +162 -0
  170. flextool/gui/scenario_lists.py +516 -0
  171. flextool/gui/settings_io.py +360 -0
  172. flextool/gui/solve_reader.py +103 -0
  173. flextool/gui/tree_reorder.py +88 -0
  174. flextool/gui/ui_metrics.py +420 -0
  175. flextool/input_derivation/__init__.py +281 -0
  176. flextool/input_derivation/_commodity_ladder.py +375 -0
  177. flextool/input_derivation/_commodity_ladder_sets.py +70 -0
  178. flextool/input_derivation/_dc_power_flow.py +377 -0
  179. flextool/input_derivation/_method_constants.py +77 -0
  180. flextool/input_derivation/_process_method.py +258 -0
  181. flextool/input_derivation/_specs.py +1026 -0
  182. flextool/input_derivation/_validators.py +321 -0
  183. flextool/lean_parquet.py +159 -0
  184. flextool/model_builder/__init__.py +5 -0
  185. flextool/model_builder/build_model.py +589 -0
  186. flextool/model_builder/encoding.py +67 -0
  187. flextool/model_builder/names.py +34 -0
  188. flextool/model_builder/profiles.py +129 -0
  189. flextool/plot_outputs/__init__.py +14 -0
  190. flextool/plot_outputs/axis_helpers.py +355 -0
  191. flextool/plot_outputs/color_template.py +888 -0
  192. flextool/plot_outputs/config.py +171 -0
  193. flextool/plot_outputs/format_helpers.py +345 -0
  194. flextool/plot_outputs/legend_helpers.py +143 -0
  195. flextool/plot_outputs/orchestrator.py +1141 -0
  196. flextool/plot_outputs/perf.py +37 -0
  197. flextool/plot_outputs/plan.py +1787 -0
  198. flextool/plot_outputs/plot_bars.py +1510 -0
  199. flextool/plot_outputs/plot_bars_detail.py +753 -0
  200. flextool/plot_outputs/plot_lines.py +951 -0
  201. flextool/plot_outputs/shared_manifest.py +564 -0
  202. flextool/plot_outputs/subplot_helpers.py +137 -0
  203. flextool/process_inputs/__init__.py +188 -0
  204. flextool/process_inputs/import_old_excel_input.json +4159 -0
  205. flextool/process_inputs/read_matpower.py +451 -0
  206. flextool/process_inputs/read_old_flextool.py +1288 -0
  207. flextool/process_inputs/read_self_describing_excel.py +1423 -0
  208. flextool/process_inputs/read_tabular_with_specification.py +1114 -0
  209. flextool/process_inputs/write_old_flextool_to_db.py +3077 -0
  210. flextool/process_inputs/write_self_describing_to_db.py +977 -0
  211. flextool/process_inputs/write_to_input_db.py +269 -0
  212. flextool/process_outputs/__init__.py +7 -0
  213. flextool/process_outputs/_annualize.py +55 -0
  214. flextool/process_outputs/_inmemory_helpers.py +292 -0
  215. flextool/process_outputs/_output_meta.py +672 -0
  216. flextool/process_outputs/calc_capacity_flows.py +107 -0
  217. flextool/process_outputs/calc_connections.py +136 -0
  218. flextool/process_outputs/calc_costs.py +260 -0
  219. flextool/process_outputs/calc_group_flows.py +192 -0
  220. flextool/process_outputs/calc_slacks.py +103 -0
  221. flextool/process_outputs/calc_storage_vre.py +160 -0
  222. flextool/process_outputs/drop_levels.py +208 -0
  223. flextool/process_outputs/handoff_writers.py +1315 -0
  224. flextool/process_outputs/out_ancillary.py +544 -0
  225. flextool/process_outputs/out_capacity.py +179 -0
  226. flextool/process_outputs/out_costs.py +334 -0
  227. flextool/process_outputs/out_flowgroup.py +189 -0
  228. flextool/process_outputs/out_flows.py +301 -0
  229. flextool/process_outputs/out_group.py +475 -0
  230. flextool/process_outputs/out_node.py +190 -0
  231. flextool/process_outputs/persist_realized_slice.py +601 -0
  232. flextool/process_outputs/process_results.py +24 -0
  233. flextool/process_outputs/read_highs_solution.py +2256 -0
  234. flextool/process_outputs/read_parameters.py +1799 -0
  235. flextool/process_outputs/read_sets.py +1095 -0
  236. flextool/process_outputs/read_variables.py +553 -0
  237. flextool/process_outputs/solve_order.py +81 -0
  238. flextool/process_outputs/spinedb_replay.py +412 -0
  239. flextool/process_outputs/union_realized_slice.py +224 -0
  240. flextool/process_outputs/write_outputs.py +1286 -0
  241. flextool/process_outputs/write_spinedb.py +1267 -0
  242. flextool/representative_periods/__init__.py +5 -0
  243. flextool/representative_periods/clustering.py +165 -0
  244. flextool/representative_periods/force_include.py +563 -0
  245. flextool/representative_periods/netload.py +365 -0
  246. flextool/representative_periods/netload_inputs.py +345 -0
  247. flextool/representative_periods/netload_iterate.py +722 -0
  248. flextool/representative_periods/preprocess.py +948 -0
  249. flextool/representative_periods/scenario_stack.py +195 -0
  250. flextool/representative_periods/weights.py +124 -0
  251. flextool/scenario_comparison/__init__.py +13 -0
  252. flextool/scenario_comparison/config_builder.py +158 -0
  253. flextool/scenario_comparison/constants.py +20 -0
  254. flextool/scenario_comparison/data_models.py +222 -0
  255. flextool/scenario_comparison/db_reader.py +399 -0
  256. flextool/scenario_comparison/dispatch_data.py +1002 -0
  257. flextool/scenario_comparison/dispatch_mappings.py +205 -0
  258. flextool/scenario_comparison/dispatch_plots.py +691 -0
  259. flextool/scenario_comparison/input_entity_colors.py +319 -0
  260. flextool/scenario_comparison/orchestrator.py +453 -0
  261. flextool/scenario_comparison/plan_union.py +244 -0
  262. flextool/scenario_comparison/plot_settings_seed.py +205 -0
  263. flextool/schemas/AXIS_CONTRACT.md +71 -0
  264. flextool/schemas/canonical_databases/howto_aggregate_output.json +6225 -0
  265. flextool/schemas/canonical_databases/howto_connections.json +5606 -0
  266. flextool/schemas/canonical_databases/howto_demand.json +5518 -0
  267. flextool/schemas/canonical_databases/howto_hydro_reservoir.json +6239 -0
  268. flextool/schemas/canonical_databases/howto_hydro_reservoir_with_pump.json +5933 -0
  269. flextool/schemas/canonical_databases/howto_non_sync_and_curtailment.json +5794 -0
  270. flextool/schemas/canonical_databases/howto_ramp_and_start_up.json +5707 -0
  271. flextool/schemas/canonical_databases/howto_stochastics.json +6032 -0
  272. flextool/schemas/canonical_databases/templates_examples.json +13532 -0
  273. flextool/schemas/canonical_databases/templates_time_settings_only.json +5340 -0
  274. flextool/schemas/comparison_settings_template.json +197 -0
  275. flextool/schemas/default_plot_settings.yaml +260 -0
  276. flextool/schemas/default_plots.yaml +2293 -0
  277. flextool/schemas/flextool_axis_contract.json +303 -0
  278. flextool/schemas/flextool_axis_contract.schema.json +247 -0
  279. flextool/schemas/old_flextool_import_template.json +4443 -0
  280. flextool/schemas/output_info_template.json +48 -0
  281. flextool/schemas/output_settings_template.json +256 -0
  282. flextool/schemas/pre_v26/flextool_template_constant_default.json +2105 -0
  283. flextool/schemas/pre_v26/flextool_template_default_optional_output.json +2152 -0
  284. flextool/schemas/pre_v26/flextool_template_default_value.json +2094 -0
  285. flextool/schemas/pre_v26/flextool_template_drop_down.json +2080 -0
  286. flextool/schemas/pre_v26/flextool_template_lifetime_method.json +1990 -0
  287. flextool/schemas/pre_v26/flextool_template_optional_outputs.json +2094 -0
  288. flextool/schemas/pre_v26/flextool_template_output_node_flows.json +2105 -0
  289. flextool/schemas/pre_v26/flextool_template_results_master.json +493 -0
  290. flextool/schemas/pre_v26/flextool_template_rolling_start_remove.json +2087 -0
  291. flextool/schemas/pre_v26/flextool_template_rolling_window.json +2059 -0
  292. flextool/schemas/pre_v26/flextool_template_storage_binding_defaults.json +46 -0
  293. flextool/schemas/pre_v26/flextool_template_v2.json +1990 -0
  294. flextool/schemas/pre_v26/flextool_template_v25.json +3864 -0
  295. flextool/schemas/spinedb_results_schema.json +581 -0
  296. flextool/schemas/spinedb_schema.json +4636 -0
  297. flextool/solver_config/copt.opt.template +18 -0
  298. flextool/solver_config/cplex.opt.template +25 -0
  299. flextool/solver_config/gurobi.opt.template +18 -0
  300. flextool/solver_config/highs.opt.template +18 -0
  301. flextool/solver_config/xpress.opt.template +26 -0
  302. flextool/spinedb_backend/__init__.py +26 -0
  303. flextool/spinedb_backend/_axis_enums.py +1119 -0
  304. flextool/spinedb_backend/_backend.py +1139 -0
  305. flextool/update_flextool/__init__.py +12 -0
  306. flextool/update_flextool/canonical_databases.py +251 -0
  307. flextool/update_flextool/db_migration.py +7108 -0
  308. flextool/update_flextool/ensure_settings_db.py +138 -0
  309. flextool/update_flextool/export_database.py +103 -0
  310. flextool/update_flextool/extend_tests_fixture.py +772 -0
  311. flextool/update_flextool/generate_canonical.py +274 -0
  312. flextool/update_flextool/initialize_database.py +42 -0
  313. flextool/update_flextool/install_info.py +225 -0
  314. flextool/update_flextool/self_update.py +464 -0
  315. flextool/update_flextool/sync_master_json_template.py +125 -0
  316. flextool/update_flextool/test_fixtures.py +187 -0
  317. flextool-4.0.0.dist-info/METADATA +217 -0
  318. flextool-4.0.0.dist-info/RECORD +322 -0
  319. flextool-4.0.0.dist-info/WHEEL +5 -0
  320. flextool-4.0.0.dist-info/entry_points.txt +17 -0
  321. flextool-4.0.0.dist-info/licenses/LICENSE.txt +19 -0
  322. flextool-4.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,493 @@
1
+ {
2
+ "object_classes": [
3
+ [
4
+ "connection",
5
+ null,
6
+ 280741963428706
7
+ ],
8
+ [
9
+ "group",
10
+ null,
11
+ 280655732797761
12
+ ],
13
+ [
14
+ "model",
15
+ null,
16
+ 280378317271475
17
+ ],
18
+ [
19
+ "node",
20
+ null,
21
+ 280655732797997
22
+ ],
23
+ [
24
+ "reserve",
25
+ null,
26
+ 281473533932379
27
+ ],
28
+ [
29
+ "unit",
30
+ null,
31
+ 281107035648629
32
+ ],
33
+ [
34
+ "upDown",
35
+ null,
36
+ 280378317271864
37
+ ]
38
+ ],
39
+ "relationship_classes": [
40
+ [
41
+ "connection__node__node",
42
+ [
43
+ "connection",
44
+ "node",
45
+ "node"
46
+ ],
47
+ null,
48
+ null
49
+ ],
50
+ [
51
+ "connection__reserve__upDown__node",
52
+ [
53
+ "connection",
54
+ "reserve",
55
+ "upDown",
56
+ "node"
57
+ ],
58
+ null,
59
+ null
60
+ ],
61
+ [
62
+ "group__reserve__upDown",
63
+ [
64
+ "reserve",
65
+ "upDown",
66
+ "group"
67
+ ],
68
+ null,
69
+ null
70
+ ],
71
+ [
72
+ "unit__node",
73
+ [
74
+ "unit",
75
+ "node"
76
+ ],
77
+ null,
78
+ null
79
+ ],
80
+ [
81
+ "unit__reserve__upDown__node",
82
+ [
83
+ "unit",
84
+ "reserve",
85
+ "upDown",
86
+ "node"
87
+ ],
88
+ null,
89
+ null
90
+ ],
91
+ [
92
+ "unit__reserve__upDown__node.1",
93
+ [
94
+ "unit",
95
+ "reserve",
96
+ "upDown",
97
+ "node"
98
+ ],
99
+ null,
100
+ null
101
+ ],
102
+ [
103
+ "unit__reserve__upDown__node.2",
104
+ [
105
+ "unit",
106
+ "reserve",
107
+ "upDown",
108
+ "node"
109
+ ],
110
+ null,
111
+ null
112
+ ],
113
+ [
114
+ "unit__reserve__upDown__node.3",
115
+ [
116
+ "unit",
117
+ "reserve",
118
+ "upDown",
119
+ "node"
120
+ ],
121
+ null,
122
+ null
123
+ ]
124
+ ],
125
+ "object_parameters": [
126
+ [
127
+ "connection",
128
+ "capacity",
129
+ null,
130
+ null,
131
+ "[MW] 'existing' - capacity that was assumed to exist in the beginning of the solve. 'invested' - capacity the model decided to invest for the given period. 'retired' - capacity the model decided to retire in the beginning of the given period. 'total' - sum of existing, invested and retired capacities."
132
+ ],
133
+ [
134
+ "connection",
135
+ "invest_marginal",
136
+ null,
137
+ null,
138
+ "[CUR/MW] Marginal cost to invest in one more MW of capacity (zero value means that the model has invested in optimal amount; negative value means that if the model would be able to invest more, it could reduce total cost by the stated amount per MW; positive value means the cost is higher than the benefit by the stated amount per MW)."
139
+ ],
140
+ [
141
+ "group",
142
+ "CO2_annualized",
143
+ null,
144
+ null,
145
+ "[Mt] how many million tons of CO2 annualized the units and connections in this group have generated (by using commodity with CO2 content) or removed."
146
+ ],
147
+ [
148
+ "group",
149
+ "VRE_share_t",
150
+ null,
151
+ null,
152
+ "Share of VRE generation in the group of nodes (sum of 'upper_limit' flows into nodes divided by the sum of inflexible inflow (parameter 'inflow') into those nodes)."
153
+ ],
154
+ [
155
+ "group",
156
+ "flow_annualized",
157
+ null,
158
+ null,
159
+ "[MWh] produces grouped and annualized flow results of the `node` members of the `group`"
160
+ ],
161
+ [
162
+ "group",
163
+ "flow_t",
164
+ null,
165
+ null,
166
+ "[MW] produces grouped flow results to the `node` members of the `group`"
167
+ ],
168
+ [
169
+ "group",
170
+ "indicator",
171
+ null,
172
+ null,
173
+ "A set of results for all node members of the group. 'sum of annualized inflows' - [MWh] sum of inflow to the node which has been annualized (scaled to correspond to a year of timesteps). 'VRE share' - [0-1] how much the flows from VRE sources (inputs using \u2018upper limit\u2019 profile) are of the inflow.\n'curtailed VRE share' - [0-1] how much the unused flows from VRE sources would have been of the inflow. 'upward slack share' - [0-1] upward slack in relation to the inflow. 'downward slack share' - [0-1] downward slack in relation to the inflow."
174
+ ],
175
+ [
176
+ "group",
177
+ "inertia_largest_flow_t",
178
+ null,
179
+ null,
180
+ "[MWh/h] Largest individual flow coming into a group of nodes that are part of the same inertia group."
181
+ ],
182
+ [
183
+ "group",
184
+ "inertia_t",
185
+ null,
186
+ null,
187
+ "[MWs] the amount of inertia (MWs) in the group of nodes in each timestep."
188
+ ],
189
+ [
190
+ "group",
191
+ "inertia_unit_node_t",
192
+ null,
193
+ null,
194
+ "[MWs] the amount of inertia in the flows between the units and the nodes in the group."
195
+ ],
196
+ [
197
+ "group",
198
+ "slack_capacity_margin",
199
+ null,
200
+ null,
201
+ "[MW or MWh] use of slack variable and the associated penalty cost to meet the capacity margin requirement in the period."
202
+ ],
203
+ [
204
+ "group",
205
+ "slack_inertia_t",
206
+ null,
207
+ null,
208
+ "[MWs] use of slack variable and the associated penalty cost to fulfill the inertia requirement in each timestep."
209
+ ],
210
+ [
211
+ "group",
212
+ "slack_nonsync_t",
213
+ null,
214
+ null,
215
+ "[MWh] use of slack variable and the associated penalty cost to fulfill the non-synchronous share maximum share constraint in each timestep."
216
+ ],
217
+ [
218
+ "group",
219
+ "sum_flow_annualized",
220
+ null,
221
+ null,
222
+ "[MWh] Annualized sum of flows in the group (members from group__connection__node and group__unit__node). Annualization scales the sum to correspond with full year time series."
223
+ ],
224
+ [
225
+ "group",
226
+ "sum_flow_t",
227
+ null,
228
+ null,
229
+ "[MWh] Sum of flows in the group (members from group__connection__node and group__unit__node)."
230
+ ],
231
+ [
232
+ "model",
233
+ "cost_annualized",
234
+ null,
235
+ null,
236
+ "M[CUR] Annualized (scaled to one year) and undiscounted cost for each period. The costs are divided into the following categories: 'unit investment/retirement' - [CUR] cost of investing in unit capacity or benefits from salvaging unit capacity. 'connection investment/retirement' - [CUR] cost of investing in connection capacity or benefits from salvaging connection capacity. 'storage investment/retirement' - [CUR] cost of investing in storage capacity or benefits from salvaging storage capacity. 'commodity' - [CUR] cost of unit using commodity inputs or benefit of selling commodities (negative value). 'CO2' - [CUR] cost of CO2 emissions caused by unit using commodities with CO2 content. 'variable cost' - [CUR] other variable operation and maintenance costs. 'starts' - [CUR] start up costs. 'upward penalty' - [CUR] cost of involuntary demand reduction. 'downward penalty' - [CUR] cost of involuntary demand increase- 'inertia penalty' - [CUR] cost of not meeting the inertia constraint. 'non-synchronous penalty' - [CUR] cost of not meeting the non-synchronous constraint. 'capacity margin penalty' - [CUR] cost of not meeting the capacity margin constraint. 'upward reserve penalty' - [CUR] cost of not meeting the upward reserve constraint. 'downward reserve penalty' - [CUR] cost of not meeting the downward reserve constraint."
237
+ ],
238
+ [
239
+ "model",
240
+ "cost_discounted_solve",
241
+ null,
242
+ null,
243
+ "M[CUR] Costs for the solve considering discounting and years presented (scaled to all years presented). The costs are divided into the following categories: 'unit investment/retirement' - [CUR] cost of investing in unit capacity or benefits from salvaging unit capacity. 'connection investment/retirement' - [CUR] cost of investing in connection capacity or benefits from salvaging connection capacity. 'storage investment/retirement' - [CUR] cost of investing in storage capacity or benefits from salvaging storage capacity. 'commodity' - [CUR] cost of unit using commodity inputs or benefit of selling commodities (negative value). 'CO2' - [CUR] cost of CO2 emissions caused by unit using commodities with CO2 content. 'variable cost' - [CUR] other variable operation and maintenance costs. 'starts' - [CUR] start up costs. 'upward penalty' - [CUR] cost of involuntary demand reduction. 'downward penalty' - [CUR] cost of involuntary demand increase- 'inertia penalty' - [CUR] cost of not meeting the inertia constraint. 'non-synchronous penalty' - [CUR] cost of not meeting the non-synchronous constraint. 'capacity margin penalty' - [CUR] cost of not meeting the capacity margin constraint. 'upward reserve penalty' - [CUR] cost of not meeting the upward reserve constraint. 'downward reserve penalty' - [CUR] cost of not meeting the downward reserve constraint."
244
+ ],
245
+ [
246
+ "model",
247
+ "cost_discounted_total",
248
+ null,
249
+ null,
250
+ "M[CUR] Total costs for all the solves considering discounting and years presented (scaled to all years presented). The costs are divided into the following categories: 'unit investment/retirement' - [CUR] cost of investing in unit capacity or benefits from salvaging unit capacity. 'connection investment/retirement' - [CUR] cost of investing in connection capacity or benefits from salvaging connection capacity. 'storage investment/retirement' - [CUR] cost of investing in storage capacity or benefits from salvaging storage capacity. 'commodity' - [CUR] cost of unit using commodity inputs or benefit of selling commodities (negative value). 'CO2' - [CUR] cost of CO2 emissions caused by unit using commodities with CO2 content. 'variable cost' - [CUR] other variable operation and maintenance costs. 'starts' - [CUR] start up costs. 'upward penalty' - [CUR] cost of involuntary demand reduction. 'downward penalty' - [CUR] cost of involuntary demand increase- 'inertia penalty' - [CUR] cost of not meeting the inertia constraint. 'non-synchronous penalty' - [CUR] cost of not meeting the non-synchronous constraint. 'capacity margin penalty' - [CUR] cost of not meeting the capacity margin constraint. 'upward reserve penalty' - [CUR] cost of not meeting the upward reserve constraint. 'downward reserve penalty' - [CUR] cost of not meeting the downward reserve constraint."
251
+ ],
252
+ [
253
+ "model",
254
+ "cost_t",
255
+ null,
256
+ null,
257
+ "M[CUR] Costs for each timestep divided into following categories: 'commodity' - [CUR] cost of unit using commodity inputs or benefit of selling commodities (negative value). 'CO2' - [CUR] cost of CO2 emissions caused by unit using commodities with CO2 content. 'variable cost' - [CUR] other variable operation and maintenance costs. 'starts' - [CUR] start up costs. 'upward penalty' - [CUR] cost of involuntary demand reduction. 'downward penalty' - [CUR] cost of involuntary demand increase- 'inertia penalty' - [CUR] cost of not meeting the inertia constraint. 'non-synchronous penalty' - [CUR] cost of not meeting the non-synchronous constraint. 'upward reserve penalty' - [CUR] cost of not meeting the upward reserve constraint. 'downward reserve penalty' - [CUR] cost of not meeting the downward reserve constraint."
258
+ ],
259
+ [
260
+ "model",
261
+ "investments discount factor",
262
+ null,
263
+ null,
264
+ null
265
+ ],
266
+ [
267
+ "model",
268
+ "operations discount factor",
269
+ null,
270
+ null,
271
+ null
272
+ ],
273
+ [
274
+ "node",
275
+ "balance",
276
+ null,
277
+ null,
278
+ "[MWh] cumulative inputs (positive) and outputs (negative) to the node from all the possible sources (from_units, from_connection, to_units, to_connections, state change over the period, self discharge during the period, upward slack for involuntary demand reduction and downward slack for involuntary demand increase)."
279
+ ],
280
+ [
281
+ "node",
282
+ "balance_t",
283
+ null,
284
+ null,
285
+ "[MW] timestep inputs (positive) and outputs (negative) to the node from all the possible sources (from_units, from_connection, to_units, to_connections, state change over the period, self discharge during the period, upward slack for involuntary demand reduction and downward slack for involuntary demand increase)"
286
+ ],
287
+ [
288
+ "node",
289
+ "capacity",
290
+ null,
291
+ null,
292
+ "'existing' - capacity that was assumed to exist in the beginning of the solve. 'invested' - capacity the model decided to invest for the given period. 'retired' - capacity the model decided to retire in the beginning of the given period. 'total' - sum of existing, invested and retired capacities."
293
+ ],
294
+ [
295
+ "node",
296
+ "invest_marginal",
297
+ null,
298
+ null,
299
+ "[CUR/MW or MWh] marginal cost to invest in one more MW or MWh of capacity (zero value means that the model has invested in optimal amount; negative value means that if the model would be able to invest more, it could reduce total cost by the stated amount per MW or MWh; positive value means the cost is higher than the benefit by the stated amount per MW or MWh)."
300
+ ],
301
+ [
302
+ "node",
303
+ "price_t",
304
+ null,
305
+ null,
306
+ "[CUR/MWh] each node that maintains an energy balance provides a price time series based on the marginal value of the balance constraint."
307
+ ],
308
+ [
309
+ "node",
310
+ "ramp_t",
311
+ null,
312
+ null,
313
+ "Includes seven parameters that form the ramp room envelope (how much there is additional room to ramp in a give node). 'ramp' - [MW] the actual ramp in the node from previous timestep to this timestep.\n'units_up' - [MW] additional room for upward ramps from non-VRE units connected to the node. 'VRE_up' - [MW] adds upward ramp room from VRE units on top of the ramp room from non-VRE units. 'connections_up' - [MW] adds upward ramp room from connections on top of the previous ramp rooms (does not consider whether the connected node has ramp room, but is simply the available capacity in the connection). 'units_down' - [MW] additional room for downward ramps from non-VRE units connected to the node. 'VRE_down' - [MW] adds downward ramp room from VRE units on top of the ramp room from non-VRE units. 'connections_down' - [MW] adds downward ramp room from connections on top of the previous ramp rooms (does not consider whether the connected node has ramp room, but is simply the available capacity in the connection)."
314
+ ],
315
+ [
316
+ "node",
317
+ "state_t",
318
+ null,
319
+ null,
320
+ "[MWh] storage state of the node in each timestep."
321
+ ],
322
+ [
323
+ "unit",
324
+ "CO2_annualized",
325
+ null,
326
+ null,
327
+ "[MtCO2] how many million tons of CO2 the unit has generated (by using commodity with CO2 content) or removed."
328
+ ],
329
+ [
330
+ "unit",
331
+ "capacity",
332
+ null,
333
+ null,
334
+ "'existing' - capacity that was assumed to exist in the beginning of the solve. 'invested' - capacity the model decided to invest for the given period. 'retired' - capacity the model decided to retire in the beginning of the given period. 'total' - sum of existing, invested and retired capacities."
335
+ ],
336
+ [
337
+ "unit",
338
+ "invest_marginal",
339
+ null,
340
+ null,
341
+ "[CUR/MW or MWh] marginal cost to invest in one more MW or MWh of capacity (zero value means that the model has invested in optimal amount; negative value means that if the model would be able to invest more, it could reduce total cost by the stated amount per MW or MWh; positive value means the cost is higher than the benefit by the stated amount per MW or MWh)."
342
+ ],
343
+ [
344
+ "unit",
345
+ "online_average",
346
+ null,
347
+ null,
348
+ "[count] average online status of the unit (average number of units online during the period)."
349
+ ],
350
+ [
351
+ "unit",
352
+ "online_t",
353
+ null,
354
+ null,
355
+ "[count] online status of the unit (number of units online in each timestep)."
356
+ ],
357
+ [
358
+ "unit",
359
+ "startup_cumulative",
360
+ null,
361
+ null,
362
+ "[count] cumulative number of unit startups during the period."
363
+ ]
364
+ ],
365
+ "relationship_parameters": [
366
+ [
367
+ "connection__node__node",
368
+ "cf",
369
+ null,
370
+ null,
371
+ "[per unit] average capacity factor of the flow, i.e. the utilization rate of the connection where flows in both directions are considered as utilization. Average of the absolute flow [MWh/h] divided by the capacity of the connection."
372
+ ],
373
+ [
374
+ "connection__node__node",
375
+ "flow_annualized",
376
+ null,
377
+ null,
378
+ "[MWh] annualized cumulative flow through the connection (left to right is positive)."
379
+ ],
380
+ [
381
+ "connection__node__node",
382
+ "flow_t",
383
+ null,
384
+ null,
385
+ "[MW] flow through the connection (left to right is positive)."
386
+ ],
387
+ [
388
+ "connection__node__node",
389
+ "flow_to_first_node_annualized",
390
+ null,
391
+ null,
392
+ "[MWh] annualized cumulative flow through the connection only to the left (first) node."
393
+ ],
394
+ [
395
+ "connection__node__node",
396
+ "flow_to_first_node_t",
397
+ null,
398
+ null,
399
+ "[MW] flow through the connection to the left (first) node."
400
+ ],
401
+ [
402
+ "connection__node__node",
403
+ "flow_to_second_node_annualized",
404
+ null,
405
+ null,
406
+ "[MWh] annualized cumulative flow through the connection only to the right (second) node."
407
+ ],
408
+ [
409
+ "connection__node__node",
410
+ "flow_to_second_node_t",
411
+ null,
412
+ null,
413
+ "[MW] flow through the connection to the right (second) node."
414
+ ],
415
+ [
416
+ "connection__reserve__upDown__node",
417
+ "reservation_average",
418
+ null,
419
+ null,
420
+ null
421
+ ],
422
+ [
423
+ "connection__reserve__upDown__node",
424
+ "reservation_t",
425
+ null,
426
+ null,
427
+ null
428
+ ],
429
+ [
430
+ "group__reserve__upDown",
431
+ "slack_reserve_t",
432
+ null,
433
+ null,
434
+ "[MW] use of slack variable and the associated penalty cost to fulfill the upward or downward reserve requirement in each timestep."
435
+ ],
436
+ [
437
+ "unit__node",
438
+ "cf",
439
+ null,
440
+ null,
441
+ " [per unit] average capacity factor of the flow, i.e. the utilization rate of the flow from/to the unit. Average of flow [MWh/h] divided by capacity [MW] of the input or output to the unit."
442
+ ],
443
+ [
444
+ "unit__node",
445
+ "curtailment_share",
446
+ null,
447
+ null,
448
+ "Share of curtailed production from potential production for periods"
449
+ ],
450
+ [
451
+ "unit__node",
452
+ "curtailment_t",
453
+ null,
454
+ null,
455
+ "[MW] curtailed flow to the node"
456
+ ],
457
+ [
458
+ "unit__node",
459
+ "flow_annualized",
460
+ null,
461
+ null,
462
+ "[MWh] cumulative flow from the node (if node is input) or to the node (if node is output)."
463
+ ],
464
+ [
465
+ "unit__node",
466
+ "flow_t",
467
+ null,
468
+ null,
469
+ "[MW] flow from the node (if node is input) or to the node (if node is output)."
470
+ ],
471
+ [
472
+ "unit__node",
473
+ "ramp_t",
474
+ null,
475
+ null,
476
+ "[MW] shows ramping of particular input or output flow between a unit and a node for each time step."
477
+ ],
478
+ [
479
+ "unit__reserve__upDown__node",
480
+ "reservation_average",
481
+ null,
482
+ null,
483
+ "[MW] how much upward or downward reserve particular unit was providing to a particular node in average during the period."
484
+ ],
485
+ [
486
+ "unit__reserve__upDown__node",
487
+ "reservation_t",
488
+ null,
489
+ null,
490
+ "[MW] how much upward or downward reserve particular unit was providing to a particular node in given timestep."
491
+ ]
492
+ ]
493
+ }