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.
- flextool/__init__.py +41 -0
- flextool/_mem_sampler.py +193 -0
- flextool/_resources.py +43 -0
- flextool/calibrate/__init__.py +51 -0
- flextool/calibrate/__main__.py +11 -0
- flextool/calibrate/_cli.py +316 -0
- flextool/calibrate/_db_alt.py +166 -0
- flextool/calibrate/_final_outputs.py +110 -0
- flextool/calibrate/_guard.py +151 -0
- flextool/calibrate/_loop.py +558 -0
- flextool/calibrate/_readers.py +223 -0
- flextool/calibrate/_report.py +263 -0
- flextool/calibrate/_sizing.py +699 -0
- flextool/calibrate/_solve.py +134 -0
- flextool/calibrate/_solve_status.py +495 -0
- flextool/cli/__init__.py +9 -0
- flextool/cli/_console.py +51 -0
- flextool/cli/_timing.py +147 -0
- flextool/cli/cmd_execute_flextool_workflow.py +187 -0
- flextool/cli/cmd_export_to_tabular.py +56 -0
- flextool/cli/cmd_import_sensitivities.py +75 -0
- flextool/cli/cmd_migrate_database.py +13 -0
- flextool/cli/cmd_open_results_db.py +269 -0
- flextool/cli/cmd_read_matpower.py +66 -0
- flextool/cli/cmd_read_old_flextool.py +63 -0
- flextool/cli/cmd_read_self_describing_tabular_input.py +50 -0
- flextool/cli/cmd_read_tabular_input.py +81 -0
- flextool/cli/cmd_run_flextool.py +1095 -0
- flextool/cli/cmd_scenario_results.py +284 -0
- flextool/cli/cmd_solve_mps.py +169 -0
- flextool/cli/cmd_update_flextool.py +17 -0
- flextool/cli/cmd_write_outputs.py +125 -0
- flextool/common_utils/__init__.py +1 -0
- flextool/common_utils/plot_mem_shape.py +77 -0
- flextool/common_utils/precision.py +451 -0
- flextool/decomposition/__init__.py +0 -0
- flextool/decomposition/region_decomposition.py +128 -0
- flextool/decomposition/region_filter.py +1261 -0
- flextool/engine_polars/__init__.py +110 -0
- flextool/engine_polars/_axis_enums.py +742 -0
- flextool/engine_polars/_benders.py +3462 -0
- flextool/engine_polars/_block_layout.py +1479 -0
- flextool/engine_polars/_blocks.py +1515 -0
- flextool/engine_polars/_commodity_ladder.py +660 -0
- flextool/engine_polars/_cumulative_invest.py +1165 -0
- flextool/engine_polars/_db_loader.py +153 -0
- flextool/engine_polars/_db_reader.py +127 -0
- flextool/engine_polars/_dc_power_flow.py +445 -0
- flextool/engine_polars/_delay.py +442 -0
- flextool/engine_polars/_derived_arithmetic.py +432 -0
- flextool/engine_polars/_derived_block.py +990 -0
- flextool/engine_polars/_derived_branch.py +769 -0
- flextool/engine_polars/_derived_existing.py +1353 -0
- flextool/engine_polars/_derived_npv.py +1297 -0
- flextool/engine_polars/_derived_params.py +9850 -0
- flextool/engine_polars/_derived_profile.py +881 -0
- flextool/engine_polars/_derived_walks.py +276 -0
- flextool/engine_polars/_determinism.py +70 -0
- flextool/engine_polars/_direct_params.py +2186 -0
- flextool/engine_polars/_dump_csvs.py +1009 -0
- flextool/engine_polars/_emit_arc_unions.py +1631 -0
- flextool/engine_polars/_emit_calc_params.py +729 -0
- flextool/engine_polars/_emit_chain_params.py +709 -0
- flextool/engine_polars/_emit_co2_accumulators.py +400 -0
- flextool/engine_polars/_emit_dispatchers.py +690 -0
- flextool/engine_polars/_emit_energy_margin.py +125 -0
- flextool/engine_polars/_emit_energy_margin_adder.py +290 -0
- flextool/engine_polars/_emit_entity_annual.py +428 -0
- flextool/engine_polars/_emit_inflow_scaling.py +1420 -0
- flextool/engine_polars/_emit_leaf_sets.py +550 -0
- flextool/engine_polars/_emit_lp_scaling.py +665 -0
- flextool/engine_polars/_emit_mid_sets.py +859 -0
- flextool/engine_polars/_emit_pdt_params.py +759 -0
- flextool/engine_polars/_emit_per_solve.py +774 -0
- flextool/engine_polars/_emit_period_calc.py +504 -0
- flextool/engine_polars/_emit_period_params.py +2398 -0
- flextool/engine_polars/_emit_provider_io.py +141 -0
- flextool/engine_polars/_emit_reserve.py +574 -0
- flextool/engine_polars/_emit_solve_time.py +311 -0
- flextool/engine_polars/_emit_solve_writers.py +1249 -0
- flextool/engine_polars/_flex_data_accumulator.py +388 -0
- flextool/engine_polars/_flex_data_provider.py +478 -0
- flextool/engine_polars/_group_slack.py +1253 -0
- flextool/engine_polars/_inmemory_reader.py +140 -0
- flextool/engine_polars/_input_source.py +336 -0
- flextool/engine_polars/_invest_seeds.py +191 -0
- flextool/engine_polars/_native_input_writer.py +100 -0
- flextool/engine_polars/_native_run_model.py +1348 -0
- flextool/engine_polars/_orchestration.py +4314 -0
- flextool/engine_polars/_output_writer.py +439 -0
- flextool/engine_polars/_param_shapes.py +1595 -0
- flextool/engine_polars/_parquet_bundle.py +723 -0
- flextool/engine_polars/_pdt_join.py +167 -0
- flextool/engine_polars/_pdt_lookup.py +547 -0
- flextool/engine_polars/_per_solve_sets.py +335 -0
- flextool/engine_polars/_projection_params.py +2056 -0
- flextool/engine_polars/_provider_keys.py +173 -0
- flextool/engine_polars/_provider_translators.py +225 -0
- flextool/engine_polars/_recursive_solve.py +703 -0
- flextool/engine_polars/_region_filter.py +2508 -0
- flextool/engine_polars/_reserve.py +649 -0
- flextool/engine_polars/_solve_acceptance.py +331 -0
- flextool/engine_polars/_solve_config.py +1001 -0
- flextool/engine_polars/_solve_context.py +885 -0
- flextool/engine_polars/_solve_handoff.py +164 -0
- flextool/engine_polars/_solve_state.py +232 -0
- flextool/engine_polars/_solver_base.py +36 -0
- flextool/engine_polars/_solver_dispatch.py +511 -0
- flextool/engine_polars/_spinedb_reader.py +1165 -0
- flextool/engine_polars/_stochastic.py +593 -0
- flextool/engine_polars/_subprocess_solve.py +1838 -0
- flextool/engine_polars/_timeline.py +1416 -0
- flextool/engine_polars/_vectorize.py +438 -0
- flextool/engine_polars/_warm.py +858 -0
- flextool/engine_polars/autoscale/__init__.py +107 -0
- flextool/engine_polars/autoscale/_config.py +218 -0
- flextool/engine_polars/autoscale/_layer2.py +1253 -0
- flextool/engine_polars/autoscale/_layer2_types.py +584 -0
- flextool/engine_polars/autoscale/_quantity_types.py +621 -0
- flextool/engine_polars/autoscale/_report.py +336 -0
- flextool/engine_polars/chain.py +259 -0
- flextool/engine_polars/input.py +6638 -0
- flextool/engine_polars/model.py +4754 -0
- flextool/env_check.py +388 -0
- flextool/export_to_tabular/__init__.py +5 -0
- flextool/export_to_tabular/db_reader.py +224 -0
- flextool/export_to_tabular/excel_writer.py +3559 -0
- flextool/export_to_tabular/export_settings.yaml +377 -0
- flextool/export_to_tabular/export_to_excel.py +227 -0
- flextool/export_to_tabular/formatting.py +543 -0
- flextool/export_to_tabular/sheet_config.py +876 -0
- flextool/gui/__init__.py +0 -0
- flextool/gui/__main__.py +118 -0
- flextool/gui/calibrate_commands.py +184 -0
- flextool/gui/calibrate_jobs.py +424 -0
- flextool/gui/check_tree.py +142 -0
- flextool/gui/cli_format.py +83 -0
- flextool/gui/config_parser.py +68 -0
- flextool/gui/data_models.py +362 -0
- flextool/gui/db_editor_integration.py +202 -0
- flextool/gui/db_version_check.py +269 -0
- flextool/gui/dialogs/__init__.py +0 -0
- flextool/gui/dialogs/add_dialog.py +1098 -0
- flextool/gui/dialogs/calibrate_dialog.py +1259 -0
- flextool/gui/dialogs/file_picker.py +473 -0
- flextool/gui/dialogs/group_picker.py +299 -0
- flextool/gui/dialogs/migration_consent_dialog.py +106 -0
- flextool/gui/dialogs/migration_progress_dialog.py +237 -0
- flextool/gui/dialogs/plot_dialog.py +459 -0
- flextool/gui/dialogs/plot_settings_picker.py +2184 -0
- flextool/gui/dialogs/project_dialog.py +426 -0
- flextool/gui/dialogs/update_dialog.py +212 -0
- flextool/gui/downsampling.py +88 -0
- flextool/gui/error_handling.py +50 -0
- flextool/gui/execution_manager.py +1715 -0
- flextool/gui/execution_window.py +1377 -0
- flextool/gui/hover_tooltip.py +111 -0
- flextool/gui/input_sources.py +730 -0
- flextool/gui/main_window.py +6181 -0
- flextool/gui/network_graph.py +215 -0
- flextool/gui/output_actions.py +393 -0
- flextool/gui/output_log_window.py +159 -0
- flextool/gui/platform_utils.py +421 -0
- flextool/gui/plot_cache.py +88 -0
- flextool/gui/plot_canvas.py +543 -0
- flextool/gui/plot_config_reader.py +272 -0
- flextool/gui/project_utils.py +100 -0
- flextool/gui/result_viewer.py +4394 -0
- flextool/gui/scenario_key.py +162 -0
- flextool/gui/scenario_lists.py +516 -0
- flextool/gui/settings_io.py +360 -0
- flextool/gui/solve_reader.py +103 -0
- flextool/gui/tree_reorder.py +88 -0
- flextool/gui/ui_metrics.py +420 -0
- flextool/input_derivation/__init__.py +281 -0
- flextool/input_derivation/_commodity_ladder.py +375 -0
- flextool/input_derivation/_commodity_ladder_sets.py +70 -0
- flextool/input_derivation/_dc_power_flow.py +377 -0
- flextool/input_derivation/_method_constants.py +77 -0
- flextool/input_derivation/_process_method.py +258 -0
- flextool/input_derivation/_specs.py +1026 -0
- flextool/input_derivation/_validators.py +321 -0
- flextool/lean_parquet.py +159 -0
- flextool/model_builder/__init__.py +5 -0
- flextool/model_builder/build_model.py +589 -0
- flextool/model_builder/encoding.py +67 -0
- flextool/model_builder/names.py +34 -0
- flextool/model_builder/profiles.py +129 -0
- flextool/plot_outputs/__init__.py +14 -0
- flextool/plot_outputs/axis_helpers.py +355 -0
- flextool/plot_outputs/color_template.py +888 -0
- flextool/plot_outputs/config.py +171 -0
- flextool/plot_outputs/format_helpers.py +345 -0
- flextool/plot_outputs/legend_helpers.py +143 -0
- flextool/plot_outputs/orchestrator.py +1141 -0
- flextool/plot_outputs/perf.py +37 -0
- flextool/plot_outputs/plan.py +1787 -0
- flextool/plot_outputs/plot_bars.py +1510 -0
- flextool/plot_outputs/plot_bars_detail.py +753 -0
- flextool/plot_outputs/plot_lines.py +951 -0
- flextool/plot_outputs/shared_manifest.py +564 -0
- flextool/plot_outputs/subplot_helpers.py +137 -0
- flextool/process_inputs/__init__.py +188 -0
- flextool/process_inputs/import_old_excel_input.json +4159 -0
- flextool/process_inputs/read_matpower.py +451 -0
- flextool/process_inputs/read_old_flextool.py +1288 -0
- flextool/process_inputs/read_self_describing_excel.py +1423 -0
- flextool/process_inputs/read_tabular_with_specification.py +1114 -0
- flextool/process_inputs/write_old_flextool_to_db.py +3077 -0
- flextool/process_inputs/write_self_describing_to_db.py +977 -0
- flextool/process_inputs/write_to_input_db.py +269 -0
- flextool/process_outputs/__init__.py +7 -0
- flextool/process_outputs/_annualize.py +55 -0
- flextool/process_outputs/_inmemory_helpers.py +292 -0
- flextool/process_outputs/_output_meta.py +672 -0
- flextool/process_outputs/calc_capacity_flows.py +107 -0
- flextool/process_outputs/calc_connections.py +136 -0
- flextool/process_outputs/calc_costs.py +260 -0
- flextool/process_outputs/calc_group_flows.py +192 -0
- flextool/process_outputs/calc_slacks.py +103 -0
- flextool/process_outputs/calc_storage_vre.py +160 -0
- flextool/process_outputs/drop_levels.py +208 -0
- flextool/process_outputs/handoff_writers.py +1315 -0
- flextool/process_outputs/out_ancillary.py +544 -0
- flextool/process_outputs/out_capacity.py +179 -0
- flextool/process_outputs/out_costs.py +334 -0
- flextool/process_outputs/out_flowgroup.py +189 -0
- flextool/process_outputs/out_flows.py +301 -0
- flextool/process_outputs/out_group.py +475 -0
- flextool/process_outputs/out_node.py +190 -0
- flextool/process_outputs/persist_realized_slice.py +601 -0
- flextool/process_outputs/process_results.py +24 -0
- flextool/process_outputs/read_highs_solution.py +2256 -0
- flextool/process_outputs/read_parameters.py +1799 -0
- flextool/process_outputs/read_sets.py +1095 -0
- flextool/process_outputs/read_variables.py +553 -0
- flextool/process_outputs/solve_order.py +81 -0
- flextool/process_outputs/spinedb_replay.py +412 -0
- flextool/process_outputs/union_realized_slice.py +224 -0
- flextool/process_outputs/write_outputs.py +1286 -0
- flextool/process_outputs/write_spinedb.py +1267 -0
- flextool/representative_periods/__init__.py +5 -0
- flextool/representative_periods/clustering.py +165 -0
- flextool/representative_periods/force_include.py +563 -0
- flextool/representative_periods/netload.py +365 -0
- flextool/representative_periods/netload_inputs.py +345 -0
- flextool/representative_periods/netload_iterate.py +722 -0
- flextool/representative_periods/preprocess.py +948 -0
- flextool/representative_periods/scenario_stack.py +195 -0
- flextool/representative_periods/weights.py +124 -0
- flextool/scenario_comparison/__init__.py +13 -0
- flextool/scenario_comparison/config_builder.py +158 -0
- flextool/scenario_comparison/constants.py +20 -0
- flextool/scenario_comparison/data_models.py +222 -0
- flextool/scenario_comparison/db_reader.py +399 -0
- flextool/scenario_comparison/dispatch_data.py +1002 -0
- flextool/scenario_comparison/dispatch_mappings.py +205 -0
- flextool/scenario_comparison/dispatch_plots.py +691 -0
- flextool/scenario_comparison/input_entity_colors.py +319 -0
- flextool/scenario_comparison/orchestrator.py +453 -0
- flextool/scenario_comparison/plan_union.py +244 -0
- flextool/scenario_comparison/plot_settings_seed.py +205 -0
- flextool/schemas/AXIS_CONTRACT.md +71 -0
- flextool/schemas/canonical_databases/howto_aggregate_output.json +6225 -0
- flextool/schemas/canonical_databases/howto_connections.json +5606 -0
- flextool/schemas/canonical_databases/howto_demand.json +5518 -0
- flextool/schemas/canonical_databases/howto_hydro_reservoir.json +6239 -0
- flextool/schemas/canonical_databases/howto_hydro_reservoir_with_pump.json +5933 -0
- flextool/schemas/canonical_databases/howto_non_sync_and_curtailment.json +5794 -0
- flextool/schemas/canonical_databases/howto_ramp_and_start_up.json +5707 -0
- flextool/schemas/canonical_databases/howto_stochastics.json +6032 -0
- flextool/schemas/canonical_databases/templates_examples.json +13532 -0
- flextool/schemas/canonical_databases/templates_time_settings_only.json +5340 -0
- flextool/schemas/comparison_settings_template.json +197 -0
- flextool/schemas/default_plot_settings.yaml +260 -0
- flextool/schemas/default_plots.yaml +2293 -0
- flextool/schemas/flextool_axis_contract.json +303 -0
- flextool/schemas/flextool_axis_contract.schema.json +247 -0
- flextool/schemas/old_flextool_import_template.json +4443 -0
- flextool/schemas/output_info_template.json +48 -0
- flextool/schemas/output_settings_template.json +256 -0
- flextool/schemas/pre_v26/flextool_template_constant_default.json +2105 -0
- flextool/schemas/pre_v26/flextool_template_default_optional_output.json +2152 -0
- flextool/schemas/pre_v26/flextool_template_default_value.json +2094 -0
- flextool/schemas/pre_v26/flextool_template_drop_down.json +2080 -0
- flextool/schemas/pre_v26/flextool_template_lifetime_method.json +1990 -0
- flextool/schemas/pre_v26/flextool_template_optional_outputs.json +2094 -0
- flextool/schemas/pre_v26/flextool_template_output_node_flows.json +2105 -0
- flextool/schemas/pre_v26/flextool_template_results_master.json +493 -0
- flextool/schemas/pre_v26/flextool_template_rolling_start_remove.json +2087 -0
- flextool/schemas/pre_v26/flextool_template_rolling_window.json +2059 -0
- flextool/schemas/pre_v26/flextool_template_storage_binding_defaults.json +46 -0
- flextool/schemas/pre_v26/flextool_template_v2.json +1990 -0
- flextool/schemas/pre_v26/flextool_template_v25.json +3864 -0
- flextool/schemas/spinedb_results_schema.json +581 -0
- flextool/schemas/spinedb_schema.json +4636 -0
- flextool/solver_config/copt.opt.template +18 -0
- flextool/solver_config/cplex.opt.template +25 -0
- flextool/solver_config/gurobi.opt.template +18 -0
- flextool/solver_config/highs.opt.template +18 -0
- flextool/solver_config/xpress.opt.template +26 -0
- flextool/spinedb_backend/__init__.py +26 -0
- flextool/spinedb_backend/_axis_enums.py +1119 -0
- flextool/spinedb_backend/_backend.py +1139 -0
- flextool/update_flextool/__init__.py +12 -0
- flextool/update_flextool/canonical_databases.py +251 -0
- flextool/update_flextool/db_migration.py +7108 -0
- flextool/update_flextool/ensure_settings_db.py +138 -0
- flextool/update_flextool/export_database.py +103 -0
- flextool/update_flextool/extend_tests_fixture.py +772 -0
- flextool/update_flextool/generate_canonical.py +274 -0
- flextool/update_flextool/initialize_database.py +42 -0
- flextool/update_flextool/install_info.py +225 -0
- flextool/update_flextool/self_update.py +464 -0
- flextool/update_flextool/sync_master_json_template.py +125 -0
- flextool/update_flextool/test_fixtures.py +187 -0
- flextool-4.0.0.dist-info/METADATA +217 -0
- flextool-4.0.0.dist-info/RECORD +322 -0
- flextool-4.0.0.dist-info/WHEEL +5 -0
- flextool-4.0.0.dist-info/entry_points.txt +17 -0
- flextool-4.0.0.dist-info/licenses/LICENSE.txt +19 -0
- flextool-4.0.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
{
|
|
2
|
+
"entity_classes": [
|
|
3
|
+
[
|
|
4
|
+
"settings",
|
|
5
|
+
[],
|
|
6
|
+
null,
|
|
7
|
+
280959580696595,
|
|
8
|
+
true
|
|
9
|
+
]
|
|
10
|
+
],
|
|
11
|
+
"entities": [
|
|
12
|
+
[
|
|
13
|
+
"settings",
|
|
14
|
+
"default",
|
|
15
|
+
null
|
|
16
|
+
]
|
|
17
|
+
],
|
|
18
|
+
"parameter_definitions": [
|
|
19
|
+
[
|
|
20
|
+
"settings",
|
|
21
|
+
"active-output-configs",
|
|
22
|
+
null,
|
|
23
|
+
null,
|
|
24
|
+
null
|
|
25
|
+
],
|
|
26
|
+
[
|
|
27
|
+
"settings",
|
|
28
|
+
"output-config-path",
|
|
29
|
+
null,
|
|
30
|
+
null,
|
|
31
|
+
null
|
|
32
|
+
],
|
|
33
|
+
[
|
|
34
|
+
"settings",
|
|
35
|
+
"plot_duration",
|
|
36
|
+
null,
|
|
37
|
+
null,
|
|
38
|
+
null
|
|
39
|
+
],
|
|
40
|
+
[
|
|
41
|
+
"settings",
|
|
42
|
+
"plot_first_timestep",
|
|
43
|
+
null,
|
|
44
|
+
null,
|
|
45
|
+
null
|
|
46
|
+
],
|
|
47
|
+
[
|
|
48
|
+
"settings",
|
|
49
|
+
"show-plots",
|
|
50
|
+
false,
|
|
51
|
+
null,
|
|
52
|
+
null
|
|
53
|
+
],
|
|
54
|
+
[
|
|
55
|
+
"settings",
|
|
56
|
+
"write-dispatch-to-excel",
|
|
57
|
+
true,
|
|
58
|
+
null,
|
|
59
|
+
null
|
|
60
|
+
],
|
|
61
|
+
[
|
|
62
|
+
"settings",
|
|
63
|
+
"write-to-excel",
|
|
64
|
+
true,
|
|
65
|
+
null,
|
|
66
|
+
null
|
|
67
|
+
],
|
|
68
|
+
[
|
|
69
|
+
"settings",
|
|
70
|
+
"write-to-ods",
|
|
71
|
+
false,
|
|
72
|
+
null,
|
|
73
|
+
null
|
|
74
|
+
]
|
|
75
|
+
],
|
|
76
|
+
"parameter_types": [
|
|
77
|
+
[
|
|
78
|
+
"settings",
|
|
79
|
+
"active-output-configs",
|
|
80
|
+
"array",
|
|
81
|
+
1
|
|
82
|
+
],
|
|
83
|
+
[
|
|
84
|
+
"settings",
|
|
85
|
+
"output-config-path",
|
|
86
|
+
"str",
|
|
87
|
+
0
|
|
88
|
+
],
|
|
89
|
+
[
|
|
90
|
+
"settings",
|
|
91
|
+
"plot_duration",
|
|
92
|
+
"float",
|
|
93
|
+
0
|
|
94
|
+
],
|
|
95
|
+
[
|
|
96
|
+
"settings",
|
|
97
|
+
"plot_first_timestep",
|
|
98
|
+
"float",
|
|
99
|
+
0
|
|
100
|
+
],
|
|
101
|
+
[
|
|
102
|
+
"settings",
|
|
103
|
+
"show-plots",
|
|
104
|
+
"bool",
|
|
105
|
+
0
|
|
106
|
+
],
|
|
107
|
+
[
|
|
108
|
+
"settings",
|
|
109
|
+
"write-dispatch-to-excel",
|
|
110
|
+
"bool",
|
|
111
|
+
0
|
|
112
|
+
],
|
|
113
|
+
[
|
|
114
|
+
"settings",
|
|
115
|
+
"write-to-excel",
|
|
116
|
+
"bool",
|
|
117
|
+
0
|
|
118
|
+
],
|
|
119
|
+
[
|
|
120
|
+
"settings",
|
|
121
|
+
"write-to-ods",
|
|
122
|
+
"bool",
|
|
123
|
+
0
|
|
124
|
+
]
|
|
125
|
+
],
|
|
126
|
+
"parameter_values": [
|
|
127
|
+
[
|
|
128
|
+
"settings",
|
|
129
|
+
"default",
|
|
130
|
+
"active-output-configs",
|
|
131
|
+
{
|
|
132
|
+
"value_type": "str",
|
|
133
|
+
"data": [
|
|
134
|
+
"default",
|
|
135
|
+
"chunks"
|
|
136
|
+
],
|
|
137
|
+
"type": "array"
|
|
138
|
+
},
|
|
139
|
+
"default"
|
|
140
|
+
],
|
|
141
|
+
[
|
|
142
|
+
"settings",
|
|
143
|
+
"default",
|
|
144
|
+
"output-config-path",
|
|
145
|
+
"templates/comparison_plots.yaml",
|
|
146
|
+
"default"
|
|
147
|
+
],
|
|
148
|
+
[
|
|
149
|
+
"settings",
|
|
150
|
+
"default",
|
|
151
|
+
"plot_duration",
|
|
152
|
+
168,
|
|
153
|
+
"default"
|
|
154
|
+
],
|
|
155
|
+
[
|
|
156
|
+
"settings",
|
|
157
|
+
"default",
|
|
158
|
+
"plot_first_timestep",
|
|
159
|
+
0.0,
|
|
160
|
+
"default"
|
|
161
|
+
],
|
|
162
|
+
[
|
|
163
|
+
"settings",
|
|
164
|
+
"default",
|
|
165
|
+
"write-dispatch-to-excel",
|
|
166
|
+
true,
|
|
167
|
+
"default"
|
|
168
|
+
],
|
|
169
|
+
[
|
|
170
|
+
"settings",
|
|
171
|
+
"default",
|
|
172
|
+
"write-to-excel",
|
|
173
|
+
true,
|
|
174
|
+
"default"
|
|
175
|
+
]
|
|
176
|
+
],
|
|
177
|
+
"alternatives": [
|
|
178
|
+
[
|
|
179
|
+
"default",
|
|
180
|
+
""
|
|
181
|
+
]
|
|
182
|
+
],
|
|
183
|
+
"scenarios": [
|
|
184
|
+
[
|
|
185
|
+
"default",
|
|
186
|
+
false,
|
|
187
|
+
""
|
|
188
|
+
]
|
|
189
|
+
],
|
|
190
|
+
"scenario_alternatives": [
|
|
191
|
+
[
|
|
192
|
+
"default",
|
|
193
|
+
"default",
|
|
194
|
+
null
|
|
195
|
+
]
|
|
196
|
+
]
|
|
197
|
+
}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
# Plot settings for this project.
|
|
2
|
+
#
|
|
3
|
+
# This file is this project's own starting point for how its results are
|
|
4
|
+
# plotted: which colors entities and result categories get, the stacking
|
|
5
|
+
# order, and the sign (positive vs negative side) coloring. You can edit
|
|
6
|
+
# it freely — it is yours to keep. Deleting it falls back to a built-in
|
|
7
|
+
# starting point.
|
|
8
|
+
#
|
|
9
|
+
# How it is read:
|
|
10
|
+
#
|
|
11
|
+
# categories: result / parameter names produced by the pipeline.
|
|
12
|
+
# Looked up by EXACT label match (casing is controlled by
|
|
13
|
+
# the pipeline, so it is stable).
|
|
14
|
+
#
|
|
15
|
+
# entities: entity names that come from your data (units,
|
|
16
|
+
# connections, nodes, and groups). Looked up
|
|
17
|
+
# CASE-INSENSITIVELY, so "Solar", "solar" and "SOLAR" all
|
|
18
|
+
# resolve to the same entry.
|
|
19
|
+
#
|
|
20
|
+
# scenarios: colors for comparison scenarios.
|
|
21
|
+
#
|
|
22
|
+
# Entry VALUES may be either a ``#RRGGBB`` hex string or an ``[r, g, b]``
|
|
23
|
+
# list. RGB components are accepted as floats in ``0..1`` or ints in
|
|
24
|
+
# ``0..255``. An entity entry may instead be a mapping with an optional
|
|
25
|
+
# negative-side color, e.g.::
|
|
26
|
+
#
|
|
27
|
+
# chp: { color: "#E64A19", neg_color: "#9c3010" }
|
|
28
|
+
#
|
|
29
|
+
# in which case ``neg_color`` colors the entity's negative-side part of a
|
|
30
|
+
# mixed (both-signs) stacked column and ``color`` is used for the positive
|
|
31
|
+
# side. A bare color uses the same color for both sides.
|
|
32
|
+
#
|
|
33
|
+
# Entry ORDER defines the stacking order: items listed here are placed in
|
|
34
|
+
# file order (positives top→bottom; negatives reversed), and any item not
|
|
35
|
+
# listed falls back to the default ordering and the tab10/tab20 matplotlib
|
|
36
|
+
# palette — so this file is purely additive and there is no penalty for an
|
|
37
|
+
# item that is not listed here.
|
|
38
|
+
|
|
39
|
+
scenarios:
|
|
40
|
+
# Colors for comparison scenarios, keyed by scenario name, e.g.
|
|
41
|
+
# S04_battery: "#1f77b4"
|
|
42
|
+
# (Left empty here — fill in per project.)
|
|
43
|
+
|
|
44
|
+
categories:
|
|
45
|
+
# Cost components produced by flextool/process_outputs/out_costs.py.
|
|
46
|
+
# Semantic grouping:
|
|
47
|
+
# - Investment / capex → saturated blues
|
|
48
|
+
# - Fixed O&M → teals / light blues
|
|
49
|
+
# - Fuel / commodities → warm browns / oranges / greens (sales)
|
|
50
|
+
# - Emissions (CO2) → dark gray / near-black
|
|
51
|
+
# - Variable O&M → purples
|
|
52
|
+
# - Startup → amber / yellow
|
|
53
|
+
# - Slack / penalties → reds / magentas (visually alarming)
|
|
54
|
+
costs:
|
|
55
|
+
# Investment / capex (saturated blues)
|
|
56
|
+
unit investment & retirement: '#1f4ea8' # strong blue
|
|
57
|
+
connection investment & retirement: '#3b6fc4' # medium blue
|
|
58
|
+
storage investment & retirement: '#6691d8' # lighter blue
|
|
59
|
+
# Fixed O&M (teal family — "keep the lights on, recurring")
|
|
60
|
+
fixed cost pre-existing: '#0f8a7a' # teal
|
|
61
|
+
fixed cost invested: '#3bb0a0' # brighter teal
|
|
62
|
+
fixed cost reduction of divestments: '#8ed2c9' # pale teal
|
|
63
|
+
# Commodity / fuel (warm browns / oranges for input, green for sales)
|
|
64
|
+
commodity_cost: '#a0522d' # sienna (fuel "energy input")
|
|
65
|
+
commodity_sales: '#2ca02c' # green (revenue / negative cost)
|
|
66
|
+
# Emissions (gray/near-black — instantly reads as "emissions")
|
|
67
|
+
co2: '#4d4d4d' # dark gray
|
|
68
|
+
# Variable O&M (purple)
|
|
69
|
+
other operational: '#8856a7' # purple
|
|
70
|
+
# Startup (amber/yellow — "ignition")
|
|
71
|
+
starts: '#e6a41a' # amber
|
|
72
|
+
# Slack / penalties (red / magenta family — alarming)
|
|
73
|
+
upward slack penalty: '#d62728' # strong red
|
|
74
|
+
downward slack penalty: '#ff7f7f' # light red
|
|
75
|
+
inertia slack penalty: '#b5179e' # magenta
|
|
76
|
+
non-synchronous slack penalty: '#e147b7' # pink-magenta
|
|
77
|
+
upward reserve slack penalty: '#c1272d' # dark red
|
|
78
|
+
downward reserve slack penalty: '#ff9896' # salmon
|
|
79
|
+
capacity margin penalty: '#7b0828' # deep wine red
|
|
80
|
+
# Node balance components produced by
|
|
81
|
+
# flextool/process_outputs/out_node.py::node_summary(). The plot shows
|
|
82
|
+
# stacked contributions to a node's energy balance: supply-side labels
|
|
83
|
+
# sit above the zero line (From units, From connections, Inflow, Loss
|
|
84
|
+
# of load), draw-side labels below it (To units, To connections, Self
|
|
85
|
+
# discharge, Excess load). Colors are chosen so:
|
|
86
|
+
# - supply / generation / imports → greens and teals
|
|
87
|
+
# - load / exports / storage charge → blues
|
|
88
|
+
# - storage self-discharge losses → neutral gray
|
|
89
|
+
# - slacks (infeasibility) → reds, matching the cost-slack hues so
|
|
90
|
+
# users learn a single "slack = red" vocabulary across plots
|
|
91
|
+
node_flows:
|
|
92
|
+
# Supply side (positive contributions to the node)
|
|
93
|
+
From units: '#2ca02c' # green — generation delivered to node
|
|
94
|
+
From connections: '#17a2b8' # teal — imports from neighbouring nodes
|
|
95
|
+
Inflow: '#7dd87a' # light green — exogenous inflow (wind, hydro)
|
|
96
|
+
# Draw side (negative contributions to the node)
|
|
97
|
+
To units: '#1f77b4' # strong blue — consumption / storage charge
|
|
98
|
+
To connections: '#5b8fbf' # steel blue — exports to neighbouring nodes
|
|
99
|
+
Self discharge: '#808080' # gray — storage self-discharge loss
|
|
100
|
+
# Slacks (infeasibility; red family matches costs-category slacks)
|
|
101
|
+
Loss of load: '#d62728' # strong red — upward slack (unmet demand)
|
|
102
|
+
Excess load: '#ff7f7f' # light red — downward slack (spill / dump)
|
|
103
|
+
|
|
104
|
+
# NodeGroup flow components emitted by
|
|
105
|
+
# flextool/process_outputs/out_group.py::nodeGroup_flows(). The column
|
|
106
|
+
# index there has two levels, ``type`` and ``item``; legend labels arrive
|
|
107
|
+
# as either ``"<type> | <item>"`` (bar plans, via _format_legend_labels)
|
|
108
|
+
# or Python tuple repr ``"('<type>', '<item>')"`` (time-series stacks).
|
|
109
|
+
#
|
|
110
|
+
# Coloring is split by ``type``:
|
|
111
|
+
#
|
|
112
|
+
# * The per-participant flow types — ``from_unitGroup`` / ``to_unitGroup``
|
|
113
|
+
# / ``from_unit`` / ``to_unit`` / ``from_connectionGroup`` /
|
|
114
|
+
# ``to_connectionGroup`` / ``from_connection`` / ``to_connection`` —
|
|
115
|
+
# are colored by their ``item`` (the participating entity), looked up
|
|
116
|
+
# in the ``entities`` section below: ``*unit*`` items in ``entities.unit``,
|
|
117
|
+
# ``*connection*`` items in ``entities.connection`` and the ``*Group``
|
|
118
|
+
# aggregates in ``entities.group``. The ``to_*`` (draw) side uses the
|
|
119
|
+
# entity's ``neg_color`` when one is set, else its ``color``. So a unit
|
|
120
|
+
# keeps the same color here as in its node-flow / dispatch plots, and an
|
|
121
|
+
# item with no ``entities`` entry falls back to the tab10/tab20 palette.
|
|
122
|
+
# These types are therefore NOT listed here.
|
|
123
|
+
#
|
|
124
|
+
# * The group-property aggregates below — ``inflow``, ``internal_losses``
|
|
125
|
+
# and ``slack`` — aren't entities, so they keep explicit category
|
|
126
|
+
# colors, looked up as ``<type>_<item>`` then ``<type>``. Reds match
|
|
127
|
+
# costs / node_flows slacks; grays read as "dissipated inside the
|
|
128
|
+
# group". ``internal_losses`` and ``slack`` have a CLOSED set of item
|
|
129
|
+
# subtypes (connections/units/storages; upward/downward — see
|
|
130
|
+
# out_group.py::nodeGroup_flows), so every series hits a ``<type>_<item>``
|
|
131
|
+
# key and no bare ``<type>`` fallback is needed. ``inflow`` keeps a
|
|
132
|
+
# bare key because its item is the node name (open set), resolved via
|
|
133
|
+
# the ``<type>`` step.
|
|
134
|
+
nodegroup_flows:
|
|
135
|
+
inflow: '#7dd87a' # light green — exogenous node inflow
|
|
136
|
+
# Internal losses (neutral grays — "energy dissipated inside the group")
|
|
137
|
+
internal_losses_connections: '#9e9e9e' # lighter gray — connection losses
|
|
138
|
+
internal_losses_units: '#6b6b6b' # darker gray — unit losses
|
|
139
|
+
internal_losses_storages: '#5c5c5c' # darkest gray — storage self-discharge
|
|
140
|
+
# Slacks (red family; aligned with costs.upward/downward slack penalty
|
|
141
|
+
# and node_flows.Loss of load / Excess load)
|
|
142
|
+
slack_upward: '#d62728' # strong red — upward slack (unmet demand)
|
|
143
|
+
slack_downward: '#ff7f7f' # light red — downward slack (spill)
|
|
144
|
+
|
|
145
|
+
# Dispatch special tokens. These are the fixed-name columns that the
|
|
146
|
+
# dispatch stacked-area plots add alongside the per-entity flows: loss of
|
|
147
|
+
# load / discharge / import on the POSITIVE side (top of the stack) and
|
|
148
|
+
# charge / export / internal losses on the NEGATIVE side (bottom). Their
|
|
149
|
+
# color is configurable, and their KEY ORDER here is honored by the engine:
|
|
150
|
+
# this list is read TOP-TO-BOTTOM as the visual stack order. A positive
|
|
151
|
+
# special always stacks above the zero axis and a negative special always
|
|
152
|
+
# below it (they never cross), but WITHIN each sign group the order of these
|
|
153
|
+
# keys sets the top-to-bottom stacking (and matches the picker's
|
|
154
|
+
# "Colors, order..." dialog, where they are reorderable within each group).
|
|
155
|
+
# Looked up by EXACT label match. The values below are the historical
|
|
156
|
+
# dispatch defaults (DEFAULT_SPECIAL_COLORS) in the historical stack order,
|
|
157
|
+
# so a project with no per-entity dispatch colors renders exactly as before.
|
|
158
|
+
# (The dashed ``Curtailed`` line and the solid ``Demand`` line are drawn
|
|
159
|
+
# with fixed red / black and are not configured here.)
|
|
160
|
+
dispatch:
|
|
161
|
+
# Positive side, visual top-to-bottom (top of the stacked area / legend)
|
|
162
|
+
LossOfLoad: crimson # upward slack — unmet demand
|
|
163
|
+
Discharge: aqua # storage discharge into the group
|
|
164
|
+
Import: indigo # imports into the group
|
|
165
|
+
# Negative side, visual top-to-bottom (nearest the zero axis downward)
|
|
166
|
+
internal_losses: darkgray # losses dissipated inside the group
|
|
167
|
+
Export: purple # exports out of the group
|
|
168
|
+
Charge: lime # storage charge drawn from the group
|
|
169
|
+
|
|
170
|
+
entities:
|
|
171
|
+
# Colors for entities, keyed by entity name (case-insensitive). The
|
|
172
|
+
# subsections below correspond to entity classes. Entry order within a
|
|
173
|
+
# subsection defines stacking order; an optional ``neg_color`` colors an
|
|
174
|
+
# entity's negative-side part of a mixed (both-signs) stacked column.
|
|
175
|
+
#
|
|
176
|
+
# ``group`` entities are split by their membership into two subsections:
|
|
177
|
+
# * ``nodeGroup`` — a group whose membership is ``group__node`` (a
|
|
178
|
+
# collection of nodes, e.g. the balance/dispatch group being plotted).
|
|
179
|
+
# * ``flowGroup`` — a group whose membership is ``group__unit__node`` /
|
|
180
|
+
# ``group__connection`` (it aggregates FLOWS, e.g. "Battery", "Coal").
|
|
181
|
+
# These are the per-participant items colored in nodeGroup-dispatch
|
|
182
|
+
# plots, so they ship with recommended technology/fuel colors below.
|
|
183
|
+
# The ``unit`` / ``connection`` / ``node`` / ``nodeGroup`` subsections
|
|
184
|
+
# start empty — per-project entity colors are filled in by you (or
|
|
185
|
+
# auto-populated from the entities present in your results); leaving them
|
|
186
|
+
# empty means no change from the palette fallback. (Projects seeded
|
|
187
|
+
# before the split keep a legacy ``group`` subsection, which the dispatch
|
|
188
|
+
# resolver still reads; a "Refresh from DB" re-buckets into
|
|
189
|
+
# nodeGroup/flowGroup.)
|
|
190
|
+
nodeGroup:
|
|
191
|
+
# Per-project nodeGroup colors, keyed by group name (case-insensitive).
|
|
192
|
+
# (Left empty here — fill in per project.)
|
|
193
|
+
flowGroup:
|
|
194
|
+
# Recommended colors for user-named flowGroup entities. A flowGroup is a
|
|
195
|
+
# ``group`` entity whose membership is ``group__unit__node`` or
|
|
196
|
+
# ``group__connection__node`` (i.e. it aggregates flows, not nodes) and
|
|
197
|
+
# that carries ``output_flowGroup_indicators = yes``. The labels below
|
|
198
|
+
# are a *convention*: if different projects happen to name a flow group
|
|
199
|
+
# "solar" or "Wind", they get the same color across dashboards.
|
|
200
|
+
#
|
|
201
|
+
# Lookup is case-insensitive (see color_template.resolve_label_color), so
|
|
202
|
+
# "Solar", "solar", and "SOLAR" all resolve to the same entry. Labels
|
|
203
|
+
# that aren't listed fall back to the tab10/tab20 palette, so this list
|
|
204
|
+
# is purely additive — there's no penalty for a project using a name
|
|
205
|
+
# that isn't here.
|
|
206
|
+
#
|
|
207
|
+
# Palette rationale: semantic colors users already associate with the
|
|
208
|
+
# technology / fuel (yellow for solar, sky blue for wind, black for
|
|
209
|
+
# coal, …), paired across related pairs (coal/lignite both dark, two
|
|
210
|
+
# blues for hydro vs pumped hydro) so stacked plots read naturally.
|
|
211
|
+
# Renewables — bright, warm-to-cool gradient
|
|
212
|
+
solar: '#F4B400' # gold / sun
|
|
213
|
+
pv: '#F4B400' # gold / sun (alias for solar PV)
|
|
214
|
+
wind: '#4FC3F7' # sky blue
|
|
215
|
+
hydro: '#1565C0' # deep blue (flowing water)
|
|
216
|
+
biomass: '#33691E' # forest green
|
|
217
|
+
geothermal: '#8D6E63' # burnt-orange brown (earth heat)
|
|
218
|
+
ocean: '#006064' # teal (deep sea — tidal / wave)
|
|
219
|
+
# Conventional — dark, muted (carbon-heavy "reads as dirty")
|
|
220
|
+
coal: '#212121' # near-black
|
|
221
|
+
lignite: '#4E342E' # dark brown (lower-grade coal)
|
|
222
|
+
gas: '#FB8C00' # orange-red (flame)
|
|
223
|
+
oil: '#6A1B9A' # dark purple (heavy fuel)
|
|
224
|
+
nuclear: '#7B1FA2' # purple (convention in energy atlases)
|
|
225
|
+
# Storage — greens / teals (shifts energy in time, not a generator)
|
|
226
|
+
battery: '#43A047' # bright green (electrochemistry)
|
|
227
|
+
pumped_hydro: '#00838F' # teal (water-based storage)
|
|
228
|
+
h2_storage: '#BA68C8' # light purple (hydrogen)
|
|
229
|
+
# Other flows
|
|
230
|
+
chp: '#E64A19' # orange-red (combined heat & power)
|
|
231
|
+
import: '#90CAF9' # light blue (external supply)
|
|
232
|
+
export: '#EF9A9A' # light red (outbound)
|
|
233
|
+
demand_response: '#FFB300' # amber (flexible load)
|
|
234
|
+
unit:
|
|
235
|
+
# Per-project unit colors, keyed by unit name (case-insensitive).
|
|
236
|
+
# Entry order defines stacking order; an optional ``neg_color`` colors
|
|
237
|
+
# the unit's negative-side part of a mixed column. These colors apply
|
|
238
|
+
# to the unit's stacked/line flow and online time-series plots (e.g.
|
|
239
|
+
# "Flows: unit to node", "Flows: node to unit", "Unit online").
|
|
240
|
+
# (Left empty here — fill in per project.) Accepted formats, e.g.:
|
|
241
|
+
# <unit_name>: "#1f77b4" # bare color (both sides)
|
|
242
|
+
# <unit_name>: { color: "#1f77b4", neg_color: "#0d3a6b" } # distinct negative side
|
|
243
|
+
connection:
|
|
244
|
+
# Per-project connection colors, keyed by connection name
|
|
245
|
+
# (case-insensitive). Entry order defines stacking order; an optional
|
|
246
|
+
# ``neg_color`` colors the negative side. These colors apply to the
|
|
247
|
+
# connection's stacked/line flow time-series plots (e.g. "Flows
|
|
248
|
+
# connection", "Connection leftward", "Connection rightward").
|
|
249
|
+
# (Left empty here — fill in per project.) Accepted formats, e.g.:
|
|
250
|
+
# <connection_name>: "#888888" # bare color (both sides)
|
|
251
|
+
# <connection_name>: { color: "#5b8fbf", neg_color: "#3c5e8a" } # distinct negative side
|
|
252
|
+
node:
|
|
253
|
+
# Per-project node colors, keyed by node name (case-insensitive).
|
|
254
|
+
# Entry order defines stacking order; an optional ``neg_color`` colors
|
|
255
|
+
# the negative side. These colors apply to the node's state time-series
|
|
256
|
+
# plot ("Node state"). The node *balance* plot ("Node") stays
|
|
257
|
+
# category-coloured (see categories.node_flows above), by design.
|
|
258
|
+
# (Left empty here — fill in per project.) Accepted formats, e.g.:
|
|
259
|
+
# <node_name>: "#4FC3F7" # bare color (both sides)
|
|
260
|
+
# <node_name>: { color: "#43A047", neg_color: "#2e7d32" } # distinct negative side
|