flextool 4.0.0__tar.gz → 4.0.2__tar.gz
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-4.0.0 → flextool-4.0.2}/PKG-INFO +9 -4
- {flextool-4.0.0 → flextool-4.0.2}/README.md +8 -3
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/dialogs/update_dialog.py +41 -17
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/main_window.py +20 -8
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/platform_utils.py +14 -11
- {flextool-4.0.0 → flextool-4.0.2}/flextool/update_flextool/install_info.py +26 -3
- {flextool-4.0.0 → flextool-4.0.2}/flextool/update_flextool/self_update.py +3 -4
- {flextool-4.0.0 → flextool-4.0.2}/flextool.egg-info/PKG-INFO +9 -4
- {flextool-4.0.0 → flextool-4.0.2}/pyproject.toml +1 -1
- {flextool-4.0.0 → flextool-4.0.2}/LICENSE.txt +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/__init__.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/_mem_sampler.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/_resources.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/calibrate/__init__.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/calibrate/__main__.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/calibrate/_cli.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/calibrate/_db_alt.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/calibrate/_final_outputs.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/calibrate/_guard.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/calibrate/_loop.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/calibrate/_readers.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/calibrate/_report.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/calibrate/_sizing.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/calibrate/_solve.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/calibrate/_solve_status.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/cli/__init__.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/cli/_console.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/cli/_timing.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/cli/cmd_execute_flextool_workflow.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/cli/cmd_export_to_tabular.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/cli/cmd_import_sensitivities.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/cli/cmd_migrate_database.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/cli/cmd_open_results_db.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/cli/cmd_read_matpower.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/cli/cmd_read_old_flextool.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/cli/cmd_read_self_describing_tabular_input.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/cli/cmd_read_tabular_input.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/cli/cmd_run_flextool.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/cli/cmd_scenario_results.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/cli/cmd_solve_mps.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/cli/cmd_update_flextool.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/cli/cmd_write_outputs.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/common_utils/__init__.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/common_utils/plot_mem_shape.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/common_utils/precision.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/decomposition/__init__.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/decomposition/region_decomposition.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/decomposition/region_filter.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/__init__.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_axis_enums.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_benders.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_block_layout.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_blocks.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_commodity_ladder.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_cumulative_invest.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_db_loader.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_db_reader.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_dc_power_flow.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_delay.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_derived_arithmetic.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_derived_block.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_derived_branch.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_derived_existing.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_derived_npv.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_derived_params.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_derived_profile.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_derived_walks.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_determinism.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_direct_params.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_dump_csvs.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_emit_arc_unions.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_emit_calc_params.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_emit_chain_params.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_emit_co2_accumulators.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_emit_dispatchers.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_emit_energy_margin.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_emit_energy_margin_adder.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_emit_entity_annual.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_emit_inflow_scaling.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_emit_leaf_sets.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_emit_lp_scaling.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_emit_mid_sets.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_emit_pdt_params.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_emit_per_solve.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_emit_period_calc.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_emit_period_params.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_emit_provider_io.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_emit_reserve.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_emit_solve_time.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_emit_solve_writers.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_flex_data_accumulator.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_flex_data_provider.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_group_slack.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_inmemory_reader.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_input_source.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_invest_seeds.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_native_input_writer.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_native_run_model.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_orchestration.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_output_writer.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_param_shapes.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_parquet_bundle.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_pdt_join.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_pdt_lookup.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_per_solve_sets.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_projection_params.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_provider_keys.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_provider_translators.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_recursive_solve.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_region_filter.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_reserve.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_solve_acceptance.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_solve_config.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_solve_context.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_solve_handoff.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_solve_state.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_solver_base.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_solver_dispatch.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_spinedb_reader.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_stochastic.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_subprocess_solve.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_timeline.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_vectorize.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/_warm.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/autoscale/__init__.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/autoscale/_config.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/autoscale/_layer2.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/autoscale/_layer2_types.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/autoscale/_quantity_types.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/autoscale/_report.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/chain.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/input.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/engine_polars/model.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/env_check.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/export_to_tabular/__init__.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/export_to_tabular/db_reader.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/export_to_tabular/excel_writer.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/export_to_tabular/export_settings.yaml +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/export_to_tabular/export_to_excel.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/export_to_tabular/formatting.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/export_to_tabular/sheet_config.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/__init__.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/__main__.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/calibrate_commands.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/calibrate_jobs.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/check_tree.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/cli_format.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/config_parser.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/data_models.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/db_editor_integration.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/db_version_check.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/dialogs/__init__.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/dialogs/add_dialog.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/dialogs/calibrate_dialog.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/dialogs/file_picker.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/dialogs/group_picker.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/dialogs/migration_consent_dialog.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/dialogs/migration_progress_dialog.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/dialogs/plot_dialog.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/dialogs/plot_settings_picker.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/dialogs/project_dialog.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/downsampling.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/error_handling.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/execution_manager.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/execution_window.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/hover_tooltip.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/input_sources.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/network_graph.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/output_actions.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/output_log_window.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/plot_cache.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/plot_canvas.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/plot_config_reader.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/project_utils.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/result_viewer.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/scenario_key.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/scenario_lists.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/settings_io.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/solve_reader.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/tree_reorder.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/gui/ui_metrics.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/input_derivation/__init__.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/input_derivation/_commodity_ladder.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/input_derivation/_commodity_ladder_sets.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/input_derivation/_dc_power_flow.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/input_derivation/_method_constants.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/input_derivation/_process_method.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/input_derivation/_specs.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/input_derivation/_validators.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/lean_parquet.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/model_builder/__init__.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/model_builder/build_model.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/model_builder/encoding.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/model_builder/names.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/model_builder/profiles.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/plot_outputs/__init__.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/plot_outputs/axis_helpers.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/plot_outputs/color_template.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/plot_outputs/config.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/plot_outputs/format_helpers.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/plot_outputs/legend_helpers.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/plot_outputs/orchestrator.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/plot_outputs/perf.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/plot_outputs/plan.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/plot_outputs/plot_bars.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/plot_outputs/plot_bars_detail.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/plot_outputs/plot_lines.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/plot_outputs/shared_manifest.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/plot_outputs/subplot_helpers.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_inputs/__init__.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_inputs/import_old_excel_input.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_inputs/read_matpower.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_inputs/read_old_flextool.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_inputs/read_self_describing_excel.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_inputs/read_tabular_with_specification.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_inputs/write_old_flextool_to_db.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_inputs/write_self_describing_to_db.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_inputs/write_to_input_db.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/__init__.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/_annualize.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/_inmemory_helpers.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/_output_meta.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/calc_capacity_flows.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/calc_connections.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/calc_costs.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/calc_group_flows.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/calc_slacks.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/calc_storage_vre.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/drop_levels.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/handoff_writers.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/out_ancillary.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/out_capacity.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/out_costs.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/out_flowgroup.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/out_flows.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/out_group.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/out_node.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/persist_realized_slice.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/process_results.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/read_highs_solution.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/read_parameters.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/read_sets.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/read_variables.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/solve_order.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/spinedb_replay.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/union_realized_slice.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/write_outputs.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/process_outputs/write_spinedb.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/representative_periods/__init__.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/representative_periods/clustering.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/representative_periods/force_include.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/representative_periods/netload.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/representative_periods/netload_inputs.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/representative_periods/netload_iterate.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/representative_periods/preprocess.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/representative_periods/scenario_stack.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/representative_periods/weights.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/scenario_comparison/__init__.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/scenario_comparison/config_builder.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/scenario_comparison/constants.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/scenario_comparison/data_models.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/scenario_comparison/db_reader.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/scenario_comparison/dispatch_data.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/scenario_comparison/dispatch_mappings.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/scenario_comparison/dispatch_plots.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/scenario_comparison/input_entity_colors.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/scenario_comparison/orchestrator.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/scenario_comparison/plan_union.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/scenario_comparison/plot_settings_seed.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/AXIS_CONTRACT.md +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/canonical_databases/howto_aggregate_output.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/canonical_databases/howto_connections.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/canonical_databases/howto_demand.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/canonical_databases/howto_hydro_reservoir.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/canonical_databases/howto_hydro_reservoir_with_pump.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/canonical_databases/howto_non_sync_and_curtailment.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/canonical_databases/howto_ramp_and_start_up.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/canonical_databases/howto_stochastics.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/canonical_databases/templates_examples.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/canonical_databases/templates_time_settings_only.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/comparison_settings_template.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/default_plot_settings.yaml +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/default_plots.yaml +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/flextool_axis_contract.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/flextool_axis_contract.schema.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/old_flextool_import_template.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/output_info_template.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/output_settings_template.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/pre_v26/flextool_template_constant_default.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/pre_v26/flextool_template_default_optional_output.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/pre_v26/flextool_template_default_value.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/pre_v26/flextool_template_drop_down.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/pre_v26/flextool_template_lifetime_method.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/pre_v26/flextool_template_optional_outputs.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/pre_v26/flextool_template_output_node_flows.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/pre_v26/flextool_template_results_master.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/pre_v26/flextool_template_rolling_start_remove.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/pre_v26/flextool_template_rolling_window.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/pre_v26/flextool_template_storage_binding_defaults.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/pre_v26/flextool_template_v2.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/pre_v26/flextool_template_v25.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/spinedb_results_schema.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/schemas/spinedb_schema.json +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/solver_config/copt.opt.template +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/solver_config/cplex.opt.template +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/solver_config/gurobi.opt.template +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/solver_config/highs.opt.template +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/solver_config/xpress.opt.template +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/spinedb_backend/__init__.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/spinedb_backend/_axis_enums.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/spinedb_backend/_backend.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/update_flextool/__init__.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/update_flextool/canonical_databases.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/update_flextool/db_migration.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/update_flextool/ensure_settings_db.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/update_flextool/export_database.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/update_flextool/extend_tests_fixture.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/update_flextool/generate_canonical.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/update_flextool/initialize_database.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/update_flextool/sync_master_json_template.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool/update_flextool/test_fixtures.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool.egg-info/SOURCES.txt +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool.egg-info/dependency_links.txt +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool.egg-info/entry_points.txt +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool.egg-info/requires.txt +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/flextool.egg-info/top_level.txt +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/setup.cfg +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_bar_layout.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_bar_sub_pixel_labels.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_blocks.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_branch_weights.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_color_template.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_commodity_ladder_rolling.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_comparison_excel.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_comparison_project_root.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_complete_period_share_reduction.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_connection_node_warnings.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_console_run_tool.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_cost_aggregation_semantics.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_cost_breakdown_by_entity.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_csv_dump_roundtrip.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_dc_power_flow.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_dispatch_consumer_and_connection_signs.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_dispatch_node_debug_and_tree.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_dispatch_order_specials.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_dispatch_scenario_tag.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_ensure_settings_db.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_entity_unitsize_invariant.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_entity_universe_carrier.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_env_check.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_export_to_tabular.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_extend_tests_fixture.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_flowgroup_indicators.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_force_include.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_group_output_warnings.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_handoff_writers.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_input_entity_colors.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_lh2_three_region.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_min_load_rolling.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_non_anticipativity.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_old_flextool_importer_schema_drift.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_open_results_db.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_output_column_metadata.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_output_metadata_renderers.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_parameter_group_coverage.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_plan_union.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_plot_draw_order.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_plot_pipeline.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_plot_plan_chunk_reconstruction.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_plot_plan_time_labels_roundtrip.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_plot_settings_seed.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_precision.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_read_highs_solution.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_regional_filter.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_representative_periods.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_rp_alternative_name.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_rp_force_include_wiring.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_rp_solves_filter.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_scenario_colors.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_scenario_stack.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_scenarios.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_self_describing_reader.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_shared_axis_manifest.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_simple_bar_entity_color.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_solve_config.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_solve_reader.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_synthesize_invest_dual.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_timings_csv.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_unidirectional_connection.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_unit_online_dt_columns.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_v52_migration.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_v63_migration.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_v64_migration.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_v65_migration.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_v66_migration.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_v67_migration.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_v68_migration.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_v69_migration.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_workdir_empty_default.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_xlsx_workflow.py +0 -0
- {flextool-4.0.0 → flextool-4.0.2}/tests/test_years_represented.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flextool
|
|
3
|
-
Version: 4.0.
|
|
3
|
+
Version: 4.0.2
|
|
4
4
|
Summary: IRENA FlexTool is an energy and power systems model for understanding the role of variable power generation in future energy systems.
|
|
5
5
|
Author: IRENA FlexTool contributors
|
|
6
6
|
License: © International Renewable Energy Agency 2018-2022
|
|
@@ -155,8 +155,8 @@ terminal so the new PATH takes effect.
|
|
|
155
155
|
|
|
156
156
|
Install FlexTool into a virtual environment to keep its packages separate from
|
|
157
157
|
other Python applications. If you want to install into the base Python (perhaps
|
|
158
|
-
because you do not otherwise use Python), just run the last
|
|
159
|
-
|
|
158
|
+
because you do not otherwise use Python), just run the last `pip install`
|
|
159
|
+
command from below.
|
|
160
160
|
|
|
161
161
|
```
|
|
162
162
|
python -m venv .venv # Windows: py -m venv .venv
|
|
@@ -165,9 +165,14 @@ python -m venv .venv # Windows: py -m venv .venv
|
|
|
165
165
|
# Windows CMD: .\.venv\Scripts\activate.bat
|
|
166
166
|
# Linux / macOS: . .venv/bin/activate
|
|
167
167
|
python -m pip install --upgrade pip
|
|
168
|
-
pip install flextool
|
|
168
|
+
pip install "flextool[toolbox,viewer]"
|
|
169
169
|
```
|
|
170
170
|
|
|
171
|
+
The `[toolbox,viewer]` extras add the Spine Toolbox database editor (for editing
|
|
172
|
+
and viewing input and result databases) and the network-graph result view. To
|
|
173
|
+
install without Spine Toolbox (edit/view data in a spreadsheet only), you can
|
|
174
|
+
use plain `pip install flextool`.
|
|
175
|
+
|
|
171
176
|
Your prompt should now show `(.venv)`. Verify with `python --version` — it
|
|
172
177
|
should report 3.11 or newer.
|
|
173
178
|
|
|
@@ -87,8 +87,8 @@ terminal so the new PATH takes effect.
|
|
|
87
87
|
|
|
88
88
|
Install FlexTool into a virtual environment to keep its packages separate from
|
|
89
89
|
other Python applications. If you want to install into the base Python (perhaps
|
|
90
|
-
because you do not otherwise use Python), just run the last
|
|
91
|
-
|
|
90
|
+
because you do not otherwise use Python), just run the last `pip install`
|
|
91
|
+
command from below.
|
|
92
92
|
|
|
93
93
|
```
|
|
94
94
|
python -m venv .venv # Windows: py -m venv .venv
|
|
@@ -97,9 +97,14 @@ python -m venv .venv # Windows: py -m venv .venv
|
|
|
97
97
|
# Windows CMD: .\.venv\Scripts\activate.bat
|
|
98
98
|
# Linux / macOS: . .venv/bin/activate
|
|
99
99
|
python -m pip install --upgrade pip
|
|
100
|
-
pip install flextool
|
|
100
|
+
pip install "flextool[toolbox,viewer]"
|
|
101
101
|
```
|
|
102
102
|
|
|
103
|
+
The `[toolbox,viewer]` extras add the Spine Toolbox database editor (for editing
|
|
104
|
+
and viewing input and result databases) and the network-graph result view. To
|
|
105
|
+
install without Spine Toolbox (edit/view data in a spreadsheet only), you can
|
|
106
|
+
use plain `pip install flextool`.
|
|
107
|
+
|
|
103
108
|
Your prompt should now show `(.venv)`. Verify with `python --version` — it
|
|
104
109
|
should report 3.11 or newer.
|
|
105
110
|
|
|
@@ -34,6 +34,7 @@ class UpdateDialog(tk.Toplevel):
|
|
|
34
34
|
install_description: str,
|
|
35
35
|
is_git: bool,
|
|
36
36
|
default_toolbox: bool,
|
|
37
|
+
toolbox_installed: bool,
|
|
37
38
|
check_on_startup: bool,
|
|
38
39
|
update_available: bool | None,
|
|
39
40
|
check_fn: Callable[[], bool],
|
|
@@ -45,14 +46,17 @@ class UpdateDialog(tk.Toplevel):
|
|
|
45
46
|
self.resizable(False, False)
|
|
46
47
|
|
|
47
48
|
self.proceed: bool = False
|
|
48
|
-
|
|
49
|
+
# For an Update: keep Spine Toolbox current if it is already installed.
|
|
50
|
+
self.include_toolbox: bool = toolbox_installed
|
|
51
|
+
# Set True by the dedicated "Install Spine Toolbox" button.
|
|
52
|
+
self.install_toolbox: bool = False
|
|
53
|
+
self._toolbox_installed: bool = toolbox_installed
|
|
49
54
|
self.check_on_startup: bool = check_on_startup
|
|
50
55
|
self.update_available: bool | None = update_available
|
|
51
56
|
self._initial_check_on_startup: bool = check_on_startup
|
|
52
57
|
self._check_fn = check_fn
|
|
53
58
|
self._post_to_main = post_to_main
|
|
54
59
|
|
|
55
|
-
self._toolbox_var = tk.BooleanVar(value=default_toolbox)
|
|
56
60
|
self._check_startup_var = tk.BooleanVar(value=check_on_startup)
|
|
57
61
|
self._status_var = tk.StringVar()
|
|
58
62
|
|
|
@@ -79,20 +83,31 @@ class UpdateDialog(tk.Toplevel):
|
|
|
79
83
|
body, textvariable=self._status_var, wraplength=440, justify="left",
|
|
80
84
|
).pack(anchor="w", pady=(0, 8))
|
|
81
85
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
86
|
+
if not toolbox_installed:
|
|
87
|
+
ttk.Label(
|
|
88
|
+
body,
|
|
89
|
+
text=(
|
|
90
|
+
"Spine Toolbox is not installed. It is a large optional "
|
|
91
|
+
"dependency required to open .sqlite input sources in the "
|
|
92
|
+
"Spine DB Editor."
|
|
93
|
+
),
|
|
94
|
+
wraplength=440,
|
|
95
|
+
justify="left",
|
|
96
|
+
foreground="#888888",
|
|
97
|
+
).pack(anchor="w", pady=(0, 4))
|
|
98
|
+
ttk.Button(
|
|
99
|
+
body,
|
|
100
|
+
text="Install Spine Toolbox",
|
|
101
|
+
command=self._on_install_toolbox,
|
|
102
|
+
).pack(anchor="w", pady=(0, 8))
|
|
103
|
+
else:
|
|
104
|
+
ttk.Label(
|
|
105
|
+
body,
|
|
106
|
+
text="Spine Toolbox is installed.",
|
|
107
|
+
wraplength=440,
|
|
108
|
+
justify="left",
|
|
109
|
+
foreground="#888888",
|
|
110
|
+
).pack(anchor="w", pady=(0, 8))
|
|
96
111
|
|
|
97
112
|
ttk.Label(
|
|
98
113
|
body,
|
|
@@ -186,9 +201,18 @@ class UpdateDialog(tk.Toplevel):
|
|
|
186
201
|
|
|
187
202
|
# ── Button handlers ─────────────────────────────────────────────
|
|
188
203
|
|
|
204
|
+
def _on_install_toolbox(self) -> None:
|
|
205
|
+
"""Install only the Spine Toolbox extra, regardless of FlexTool version."""
|
|
206
|
+
self.proceed = True
|
|
207
|
+
self.install_toolbox = True
|
|
208
|
+
self.include_toolbox = True
|
|
209
|
+
self.check_on_startup = bool(self._check_startup_var.get())
|
|
210
|
+
self._close()
|
|
211
|
+
|
|
189
212
|
def _on_update(self) -> None:
|
|
190
213
|
self.proceed = True
|
|
191
|
-
|
|
214
|
+
# include_toolbox already reflects whether Toolbox is installed (kept
|
|
215
|
+
# current during the update); install_toolbox stays False.
|
|
192
216
|
self.check_on_startup = bool(self._check_startup_var.get())
|
|
193
217
|
self._close()
|
|
194
218
|
|
|
@@ -3126,14 +3126,15 @@ class MainWindow(tk.Tk):
|
|
|
3126
3126
|
# spine-db-editor not found: point at 'Update FlexTool' and
|
|
3127
3127
|
# offer the system default .sqlite app as a fallback.
|
|
3128
3128
|
# askyesnocancel: Yes=Update, No=default app, Cancel=nothing.
|
|
3129
|
+
from flextool.update_flextool import install_info
|
|
3129
3130
|
choice = messagebox.askyesnocancel(
|
|
3130
3131
|
"Spine DB Editor not available",
|
|
3131
3132
|
"The 'spine-db-editor' command was not found, so .sqlite "
|
|
3132
3133
|
"input sources cannot be opened in the Spine DB Editor.\n\n"
|
|
3133
3134
|
"It is part of Spine Toolbox. You can install it via "
|
|
3134
3135
|
"'Update FlexTool' (tick 'Install Spine Toolbox'), or "
|
|
3135
|
-
|
|
3136
|
-
|
|
3136
|
+
"manually:\n\n"
|
|
3137
|
+
f" {install_info.manual_toolbox_command()}\n\n"
|
|
3137
3138
|
"Open 'Update FlexTool' now?\n\n"
|
|
3138
3139
|
"Choose 'No' to open the file with your system's default "
|
|
3139
3140
|
"application for .sqlite files instead.",
|
|
@@ -3175,6 +3176,7 @@ class MainWindow(tk.Tk):
|
|
|
3175
3176
|
install_description=install_info.describe_install(),
|
|
3176
3177
|
is_git=install_info.is_git_install(),
|
|
3177
3178
|
default_toolbox=default_toolbox,
|
|
3179
|
+
toolbox_installed=install_info.toolbox_installed(),
|
|
3178
3180
|
check_on_startup=self.global_settings.check_updates_on_startup,
|
|
3179
3181
|
update_available=self._update_available,
|
|
3180
3182
|
check_fn=install_info.update_available,
|
|
@@ -3194,16 +3196,25 @@ class MainWindow(tk.Tk):
|
|
|
3194
3196
|
if not dlg.proceed:
|
|
3195
3197
|
return
|
|
3196
3198
|
|
|
3197
|
-
|
|
3199
|
+
if dlg.install_toolbox:
|
|
3200
|
+
steps, cwd = install_info.install_toolbox_steps()
|
|
3201
|
+
description = "Install Spine Toolbox"
|
|
3202
|
+
intro = "Installing Spine Toolbox…\n"
|
|
3203
|
+
else:
|
|
3204
|
+
steps, cwd = install_info.upgrade_steps(dlg.include_toolbox)
|
|
3205
|
+
description = "Update FlexTool"
|
|
3206
|
+
intro = (
|
|
3207
|
+
"Updating FlexTool"
|
|
3208
|
+
+ (" with Spine Toolbox" if dlg.include_toolbox else "")
|
|
3209
|
+
+ "…\n"
|
|
3210
|
+
)
|
|
3198
3211
|
self._run_cli_job(
|
|
3199
3212
|
steps,
|
|
3200
3213
|
job_type=JobType.UPDATE,
|
|
3201
|
-
description=
|
|
3214
|
+
description=description,
|
|
3202
3215
|
action_key="update_flextool",
|
|
3203
3216
|
cwd=cwd,
|
|
3204
|
-
intro=
|
|
3205
|
-
+ (" with Spine Toolbox" if dlg.include_toolbox else "")
|
|
3206
|
-
+ "…\n",
|
|
3217
|
+
intro=intro,
|
|
3207
3218
|
on_finish=self._update_finished,
|
|
3208
3219
|
)
|
|
3209
3220
|
|
|
@@ -3284,6 +3295,7 @@ class MainWindow(tk.Tk):
|
|
|
3284
3295
|
if self.execution_window is not None:
|
|
3285
3296
|
self.execution_window.select_job(job.job_id)
|
|
3286
3297
|
|
|
3298
|
+
from flextool.update_flextool import install_info
|
|
3287
3299
|
if messagebox.askyesno(
|
|
3288
3300
|
"Could not open database",
|
|
3289
3301
|
"The Spine DB Editor failed to start, so the database could not "
|
|
@@ -3292,7 +3304,7 @@ class MainWindow(tk.Tk):
|
|
|
3292
3304
|
"The full error is shown in the Execution window. You can "
|
|
3293
3305
|
"(re)install Spine Toolbox via 'Update FlexTool' (tick 'Install "
|
|
3294
3306
|
"Spine Toolbox'), or manually:\n\n"
|
|
3295
|
-
|
|
3307
|
+
f" {install_info.manual_toolbox_command()}\n\n"
|
|
3296
3308
|
"Open 'Update FlexTool' now?",
|
|
3297
3309
|
parent=self,
|
|
3298
3310
|
):
|
|
@@ -4,7 +4,6 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import logging
|
|
6
6
|
import os
|
|
7
|
-
import shutil
|
|
8
7
|
import subprocess
|
|
9
8
|
import sys
|
|
10
9
|
from pathlib import Path
|
|
@@ -95,24 +94,28 @@ def open_folder(dirpath: Path) -> None:
|
|
|
95
94
|
|
|
96
95
|
|
|
97
96
|
def open_spine_db_editor(db_url: str) -> subprocess.Popen | None:
|
|
98
|
-
"""Launch
|
|
99
|
-
|
|
100
|
-
|
|
97
|
+
"""Launch the Spine DB editor on *db_url* as a subprocess, using the current
|
|
98
|
+
environment's Spine Toolbox (``python -m spinetoolbox.spine_db_editor.main``,
|
|
99
|
+
matching the CLI launcher) rather than a ``spine-db-editor`` found anywhere
|
|
100
|
+
on PATH.
|
|
101
101
|
|
|
102
102
|
Returns:
|
|
103
|
-
The :class:`subprocess.Popen` object, or ``None`` if
|
|
104
|
-
|
|
103
|
+
The :class:`subprocess.Popen` object, or ``None`` if Spine Toolbox is
|
|
104
|
+
not installed in this environment.
|
|
105
105
|
"""
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
106
|
+
import importlib.util
|
|
107
|
+
|
|
108
|
+
if importlib.util.find_spec("spinetoolbox") is None:
|
|
109
|
+
logger.warning("spinetoolbox is not installed in this environment")
|
|
109
110
|
return None
|
|
110
111
|
|
|
111
112
|
try:
|
|
112
|
-
proc = subprocess.Popen(
|
|
113
|
+
proc = subprocess.Popen(
|
|
114
|
+
[sys.executable, "-m", "spinetoolbox.spine_db_editor.main", db_url]
|
|
115
|
+
)
|
|
113
116
|
return proc
|
|
114
117
|
except OSError:
|
|
115
|
-
logger.warning("Failed to launch
|
|
118
|
+
logger.warning("Failed to launch the Spine DB editor", exc_info=True)
|
|
116
119
|
return None
|
|
117
120
|
|
|
118
121
|
|
|
@@ -18,7 +18,6 @@ from __future__ import annotations
|
|
|
18
18
|
import importlib.metadata as _im
|
|
19
19
|
import json
|
|
20
20
|
import logging
|
|
21
|
-
import shutil
|
|
22
21
|
import subprocess
|
|
23
22
|
import sys
|
|
24
23
|
from pathlib import Path
|
|
@@ -58,12 +57,15 @@ def flextool_version() -> str:
|
|
|
58
57
|
|
|
59
58
|
|
|
60
59
|
def toolbox_installed() -> bool:
|
|
61
|
-
"""Whether Spine Toolbox
|
|
60
|
+
"""Whether Spine Toolbox is installed *in the current environment* (the venv
|
|
61
|
+
running FlexTool). Deliberately does NOT fall back to a PATH lookup — a
|
|
62
|
+
``spine-db-editor`` from a different environment would otherwise read as
|
|
63
|
+
installed even though it isn't importable here."""
|
|
62
64
|
try:
|
|
63
65
|
_im.distribution("spinetoolbox")
|
|
64
66
|
return True
|
|
65
67
|
except _im.PackageNotFoundError:
|
|
66
|
-
return
|
|
68
|
+
return False
|
|
67
69
|
|
|
68
70
|
|
|
69
71
|
def describe_install() -> str:
|
|
@@ -74,6 +76,27 @@ def describe_install() -> str:
|
|
|
74
76
|
return f"PyPI install (version {flextool_version()})"
|
|
75
77
|
|
|
76
78
|
|
|
79
|
+
def manual_toolbox_command() -> str:
|
|
80
|
+
"""Shell command a user can run by hand to add Spine Toolbox, matched to the
|
|
81
|
+
current install type — editable ``-e .[toolbox]`` in a git checkout (running
|
|
82
|
+
the PyPI form there would clobber the editable install), otherwise the PyPI
|
|
83
|
+
``flextool[toolbox]`` form."""
|
|
84
|
+
if git_checkout_root() is not None:
|
|
85
|
+
return 'pip install -e ".[toolbox]"'
|
|
86
|
+
return 'pip install "flextool[toolbox]"'
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def install_toolbox_steps() -> tuple[list[list[str]], Path | None]:
|
|
90
|
+
"""Command(s) to install *just* the Spine Toolbox extra, without updating
|
|
91
|
+
FlexTool itself. Editable ``-e .[toolbox]`` (run in the repo root) for a git
|
|
92
|
+
checkout, otherwise the PyPI ``flextool[toolbox]`` form."""
|
|
93
|
+
py = sys.executable
|
|
94
|
+
root = git_checkout_root()
|
|
95
|
+
if root is not None:
|
|
96
|
+
return [[py, "-m", "pip", "install", "-e", ".[toolbox]"]], root
|
|
97
|
+
return [[py, "-m", "pip", "install", "flextool[toolbox]"]], None
|
|
98
|
+
|
|
99
|
+
|
|
77
100
|
def upgrade_steps(include_toolbox: bool) -> tuple[list[list[str]], Path | None]:
|
|
78
101
|
"""Build the command(s) that upgrade FlexTool in place.
|
|
79
102
|
|
|
@@ -269,7 +269,7 @@ def ensure_runtime_files(verbose: bool = False) -> None:
|
|
|
269
269
|
|
|
270
270
|
# 5. results.sqlite (and its template), both create-if-missing.
|
|
271
271
|
try:
|
|
272
|
-
result_template_path = str(package_data_path("schemas/
|
|
272
|
+
result_template_path = str(package_data_path("schemas/spinedb_results_schema.json"))
|
|
273
273
|
if not os.path.exists("templates/results_template.sqlite"):
|
|
274
274
|
initialize_result_database("templates/results_template.sqlite", result_template_path)
|
|
275
275
|
if not os.path.exists("results.sqlite") and os.path.exists("templates/results_template.sqlite"):
|
|
@@ -379,7 +379,7 @@ def update_flextool(skip_git):
|
|
|
379
379
|
# Refresh the results template (unconditional) and ensure results.sqlite
|
|
380
380
|
# exists (ensure_runtime_files seeds it; this is a belt-and-braces copy
|
|
381
381
|
# for the case it was removed since).
|
|
382
|
-
result_template_path = str(package_data_path("schemas/
|
|
382
|
+
result_template_path = str(package_data_path("schemas/spinedb_results_schema.json"))
|
|
383
383
|
if os.path.exists('templates/results_template.sqlite'):
|
|
384
384
|
os.remove('templates/results_template.sqlite')
|
|
385
385
|
initialize_result_database('templates/results_template.sqlite', result_template_path)
|
|
@@ -392,8 +392,7 @@ def update_flextool(skip_git):
|
|
|
392
392
|
template = json.load(json_file)
|
|
393
393
|
with DatabaseMapping('sqlite:///' + 'results.sqlite', create = False, upgrade = True) as db:
|
|
394
394
|
#these update the old descriptions, but wont remove them or change names (the new name is created, but old stays)
|
|
395
|
-
(num,log) = import_data(db,
|
|
396
|
-
(num,log) = import_data(db, relationship_parameters = template["relationship_parameters"])
|
|
395
|
+
(num,log) = import_data(db, parameter_definitions = template["parameter_definitions"])
|
|
397
396
|
try:
|
|
398
397
|
db.commit_session("Updated relationship_parameters, object parameters to the Results.sqlite")
|
|
399
398
|
except NothingToCommit:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flextool
|
|
3
|
-
Version: 4.0.
|
|
3
|
+
Version: 4.0.2
|
|
4
4
|
Summary: IRENA FlexTool is an energy and power systems model for understanding the role of variable power generation in future energy systems.
|
|
5
5
|
Author: IRENA FlexTool contributors
|
|
6
6
|
License: © International Renewable Energy Agency 2018-2022
|
|
@@ -155,8 +155,8 @@ terminal so the new PATH takes effect.
|
|
|
155
155
|
|
|
156
156
|
Install FlexTool into a virtual environment to keep its packages separate from
|
|
157
157
|
other Python applications. If you want to install into the base Python (perhaps
|
|
158
|
-
because you do not otherwise use Python), just run the last
|
|
159
|
-
|
|
158
|
+
because you do not otherwise use Python), just run the last `pip install`
|
|
159
|
+
command from below.
|
|
160
160
|
|
|
161
161
|
```
|
|
162
162
|
python -m venv .venv # Windows: py -m venv .venv
|
|
@@ -165,9 +165,14 @@ python -m venv .venv # Windows: py -m venv .venv
|
|
|
165
165
|
# Windows CMD: .\.venv\Scripts\activate.bat
|
|
166
166
|
# Linux / macOS: . .venv/bin/activate
|
|
167
167
|
python -m pip install --upgrade pip
|
|
168
|
-
pip install flextool
|
|
168
|
+
pip install "flextool[toolbox,viewer]"
|
|
169
169
|
```
|
|
170
170
|
|
|
171
|
+
The `[toolbox,viewer]` extras add the Spine Toolbox database editor (for editing
|
|
172
|
+
and viewing input and result databases) and the network-graph result view. To
|
|
173
|
+
install without Spine Toolbox (edit/view data in a spreadsheet only), you can
|
|
174
|
+
use plain `pip install flextool`.
|
|
175
|
+
|
|
171
176
|
Your prompt should now show `(.venv)`. Verify with `python --version` — it
|
|
172
177
|
should report 3.11 or newer.
|
|
173
178
|
|
|
@@ -3,7 +3,7 @@ build-backend = "setuptools.build_meta"
|
|
|
3
3
|
|
|
4
4
|
[project]
|
|
5
5
|
name = "flextool"
|
|
6
|
-
version = "4.0.
|
|
6
|
+
version = "4.0.2"
|
|
7
7
|
description = "IRENA FlexTool is an energy and power systems model for understanding the role of variable power generation in future energy systems."
|
|
8
8
|
readme = "README.md"
|
|
9
9
|
license = { file = "LICENSE.txt" }
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|