rtc-tools 2.8.0a0__tar.gz → 2.8.0a2__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.
Potentially problematic release.
This version of rtc-tools might be problematic. Click here for more details.
- rtc_tools-2.8.0a2/.github/actions/setup-python/action.yml +52 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/.github/workflows/rtc-tools.yml +15 -6
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/AUTHORS +3 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/PKG-INFO +6 -8
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/README.md +2 -4
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/optimization/modelica_models.rst +1 -1
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/pyproject.toml +3 -3
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/_internal/casadi_helpers.py +22 -4
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/optimization/collocated_integrated_optimization_problem.py +47 -5
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/optimization/optimization_problem.py +2 -2
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/ModelSymbolicParameters.mo +4 -1
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/test_delay_expressions.py +29 -2
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/test_modelica_mixin.py +52 -1
- rtc_tools-2.8.0a0/.github/actions/setup-python/action.yml +0 -33
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/.codecov.yml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/.coveragerc +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/.git-blame-ignore-revs +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/.pre-commit-config.yaml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/.readthedocs.yaml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/CONTRIBUTING.md +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/COPYING +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/COPYING.LESSER +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/Makefile +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/_static/theme_overrides.css +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/conf.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/optimization/basic.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/optimization/cascading_channels.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/optimization/channel_pulse.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/optimization/channel_wave_damping.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/optimization/debugging.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/optimization/ensemble.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/optimization/goal_programming.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/optimization/integrator_delay.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/optimization/lookup_table.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/optimization/mixed_integer.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/optimization/pumped_hydropower_system.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/optimization.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/pyplots/basic_results.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/pyplots/cascading_channels_results.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/pyplots/channel_pulse_results.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/pyplots/channel_wave_damping.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/pyplots/ensemble_results.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/pyplots/goal_programming_results.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/pyplots/integrator_delay.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/pyplots/lookup_table_results.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/pyplots/mixed_integer_results.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/pyplots/pumped_hydropower_system_results.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/pyplots/simulation_results.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/simulation/custom_equation.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/simulation/setpoint.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/simulation.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/getting-started.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/images/Lake-Hartwell-24012016.jpg +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/images/PumpedStoragePlant_openmodelica.png +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/images/Woudagemaal.jpg +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/images/basic_example_console.png +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/images/cascading_channels_omedit.png +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/images/channel_impulse_xs.png +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/images/channel_wave_damping_omedit.png +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/images/graig-coch-2117306_640.jpg +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/images/integrator_delay_modelica.png +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/images/lavant-2976738_1280.jpg +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/images/logo.png +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/images/orifice_vs_pump_openmodelica.png +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/images/pont-du-gard-1742029_1280.jpg +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/images/simple_storage_openmodelica.png +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/images/single_channel.png +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/images/single_channel_hec-ras.png +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/index.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/make.bat +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/optimization/basics.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/optimization/csv_io.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/optimization/fews_io.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/optimization/forecast_uncertainty.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/optimization/goal_programming/converting_goals_to_constraints.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/optimization/goal_programming/goals.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/optimization/goal_programming/linearized_order.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/optimization/goal_programming/main_idea.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/optimization/goal_programming/minimize_absolute_value.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/optimization/homotopy.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/optimization/initial_state_estimation.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/optimization/linearization.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/optimization/lookup_tables.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/optimization/multi_objective.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/optimization/time_discretization.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/optimization.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/simulation/basics.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/simulation/csv_io.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/simulation/fews_io.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/simulation.rst +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/basic/input/initial_state.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/basic/input/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/basic/model/Example.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/basic/output/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/basic/reference_output/timeseries_export.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/basic/src/example.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/cascading_channels/input/initial_state.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/cascading_channels/input/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/cascading_channels/model/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/cascading_channels/model/Example.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/cascading_channels/output/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/cascading_channels/reference_output/timeseries_export.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/cascading_channels/src/example.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/channel_pulse/HEC-RAS.zip +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/channel_pulse/input/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/channel_pulse/model/Example.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/channel_pulse/output/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/channel_pulse/reference_output/HEC-RAS_export.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/channel_pulse/reference_output/timeseries_export.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/channel_pulse/reference_output/timeseries_export_inertial_wave.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/channel_pulse/reference_output/timeseries_export_inertial_wave_semi_implicit.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/channel_pulse/reference_output/timeseries_export_saint_venant.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/channel_pulse/reference_output/timeseries_export_saint_venant_upwind.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/channel_pulse/src/example.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/channel_wave_damping/input/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/channel_wave_damping/model/Example.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/channel_wave_damping/model/ExampleLocalControl.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/channel_wave_damping/model/ExampleOptimization.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/channel_wave_damping/model/PIDController.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/channel_wave_damping/output/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/channel_wave_damping/reference_output/timeseries_export.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/channel_wave_damping/reference_output/timeseries_export_local_control.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/channel_wave_damping/src/example_local_control.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/channel_wave_damping/src/example_optimization.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/channel_wave_damping/src/steady_state_initialization_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/channel_wave_damping/src/step_size_parameter_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/ensemble/input/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/ensemble/input/ensemble.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/ensemble/input/forecast1/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/ensemble/input/forecast1/initial_state.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/ensemble/input/forecast1/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/ensemble/input/forecast2/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/ensemble/input/forecast2/initial_state.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/ensemble/input/forecast2/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/ensemble/input/lookup_tables/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/ensemble/input/lookup_tables/curvefit_options.ini +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/ensemble/input/lookup_tables/storage_V.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/ensemble/model/Example.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/ensemble/output/forecast1/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/ensemble/output/forecast2/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/ensemble/reference_output/forecast1/timeseries_export.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/ensemble/reference_output/forecast2/timeseries_export.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/ensemble/src/example.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/goal_programming/input/initial_state.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/goal_programming/input/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/goal_programming/model/Example.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/goal_programming/output/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/goal_programming/reference_output/timeseries_export.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/goal_programming/src/example.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/integrator_delay/input/initial_state.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/integrator_delay/input/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/integrator_delay/input/timeseries_import_simulation.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/integrator_delay/model/Example.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/integrator_delay/src/example.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/lookup_table/input/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/lookup_table/input/initial_state.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/lookup_table/input/lookup_tables/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/lookup_table/input/lookup_tables/curvefit_options.ini +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/lookup_table/input/lookup_tables/storage_V.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/lookup_table/input/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/lookup_table/model/Example.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/lookup_table/output/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/lookup_table/reference_output/timeseries_export.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/lookup_table/src/example.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/mixed_integer/input/initial_state.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/mixed_integer/input/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/mixed_integer/model/Example.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/mixed_integer/output/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/mixed_integer/reference_output/timeseries_export.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/mixed_integer/src/example.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/pumped_hydropower_system/input/initial_state.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/pumped_hydropower_system/input/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/pumped_hydropower_system/model/PumpedStoragePlant.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/pumped_hydropower_system/output/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/pumped_hydropower_system/reference_output/timeseries_export.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/pumped_hydropower_system/src/example.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/simulation/input/parameters.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/simulation/input/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/simulation/model/Example.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/simulation/output/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/simulation/reference_output/timeseries_export.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/simulation/src/example.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/simulation_with_custom_equations/input/initial_state.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/simulation_with_custom_equations/input/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/simulation_with_custom_equations/model/SimpleModel.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/simulation_with_custom_equations/output/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/simulation_with_custom_equations/reference_output/timeseries_export.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/simulation_with_custom_equations/src/simple_model.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/single_reservoir/input/initial_state.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/single_reservoir/input/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/single_reservoir/model/single_reservoir.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/single_reservoir/output/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/single_reservoir/reference_output/timeseries_export.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/examples/single_reservoir/src/single_reservoir.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/sonar-project.properties +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/__init__.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/_internal/__init__.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/_internal/alias_tools.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/_internal/caching.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/_internal/debug_check_helpers.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/_internal/ensemble_bounds_decorator.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/data/__init__.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/data/csv.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/data/interpolation/__init__.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/data/interpolation/bspline.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/data/interpolation/bspline1d.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/data/interpolation/bspline2d.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/data/netcdf.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/data/pi.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/data/rtc.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/data/storage.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/optimization/__init__.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/optimization/control_tree_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/optimization/csv_lookup_table_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/optimization/csv_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/optimization/goal_programming_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/optimization/goal_programming_mixin_base.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/optimization/homotopy_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/optimization/initial_state_estimation_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/optimization/io_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/optimization/linearization_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/optimization/linearized_order_goal_programming_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/optimization/min_abs_goal_programming_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/optimization/modelica_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/optimization/netcdf_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/optimization/pi_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/optimization/planning_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/optimization/single_pass_goal_programming_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/optimization/timeseries.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/rtctoolsapp.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/simulation/__init__.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/simulation/csv_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/simulation/io_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/simulation/pi_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/simulation/simulation_problem.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/util.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/src/rtctools/version.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/__init__.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/__init__.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/data/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/data/curve.dat +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/data/diag.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/data/initial_state_0.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/data/initial_state_1.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/data/look_up_table_0.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/data/look_up_table_1.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/data/look_up_table_2.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/data/pi_run.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/data/rtcDataConfig.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/data/rtcParameterConfig.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/data/surface.dat +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/data/timeseries_export.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/data/timeseries_import.bin +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/data/timeseries_import.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/data/timeseries_import_0.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/data/timeseries_import_1.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/data/timeseries_import_2.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/data/timeseries_import_ensemble.nc +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/data/timeseries_import_ensemble.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/data/timeseries_import_ensemblesize1_noRealization.nc +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/data/timeseries_import_ensemblesize1_withRealization.nc +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/data/timeseries_import_neq.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/data_path.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/test_csv.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/test_data.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/test_diag.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/test_interpolate.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/test_netcdf.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data/test_storage.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/data_path.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/examples/__init__.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/examples/test_examples.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/internal/__init__.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/internal/test_alias_tools.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/__init__.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/Model.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/ModelAlgebraic.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/ModelDebugChecks.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/ModelDelay.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/ModelMixedInteger.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/ModelWithInitial.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/ModelWithInitialLinear.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/ModelWithLookupTable.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/SingleShootingModel.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/ensemble.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/initial_state.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/lookup_tables/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/lookup_tables/curvefit_options.ini +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/lookup_tables/x_prime.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/member0/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/member0/initial_state.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/member0/parameters.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/member0/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/member1/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/member1/initial_state.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/member1/parameters.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/member1/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/Model.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_ensemble_sizes/ensemble.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_ensemble_sizes/member0/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_ensemble_sizes/member1/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_ensemble_sizes/member2/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_ensemble_sizes/member3/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_ensemble_sizes/rtcDataConfig.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_ensemble_sizes/rtcParameterConfig.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_ensemble_sizes/timeseries_import.nc +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_ensemble_sizes/timeseries_import.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_initial_date/ensemble.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_initial_date/member0/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_initial_date/member1/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_initial_date/rtcDataConfig.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_initial_date/rtcParameterConfig.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_initial_date/timeseries_import.nc +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_initial_date/timeseries_import.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_timestep/ensemble.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_timestep/member0/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_timestep/member1/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_timestep/rtcDataConfig.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_timestep/rtcParameterConfig.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_timestep/timeseries_import.nc +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_timestep/timeseries_import.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_values/ensemble.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_values/member0/parameters.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_values/member0/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_values/member1/parameters.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_values/member1/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_values/rtcDataConfig.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_values/rtcParameterConfig.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_values/timeseries_import.nc +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/multiple_io_mixins/different_values/timeseries_import.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/one-member-ensemble/ensemble.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/one-member-ensemble/member0/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/one-member-ensemble/member0/initial_state.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/one-member-ensemble/member0/parameters.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/one-member-ensemble/member0/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/parameters.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/rtcDataConfig.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/rtcParameterConfig.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/rtcParameterConfig_extra.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/timeseries_import.nc +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data/timeseries_import.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/data_path.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/test_control_tree_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/test_csv_lookuptable_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/test_csv_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/test_debug_checks.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/test_goal_programming.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/test_integration.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/test_interpolation.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/test_io_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/test_linearized_order_goal_programming_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/test_min_abs_goal_programming.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/test_multiple_io_mixins.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/test_netcdf_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/test_optimization_problem.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/test_path_extra_variables.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/test_pi_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/test_planning_and_control_tree_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/test_planning_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/test_problem_class_check.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/test_single_pass_goal_programming.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/test_solvers.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/test_timeseries.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/test_vector_constraints_variables.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/optimization/test_vector_goals.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/__init__.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/data/.gitignore +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/data/Model.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/data/ModelCustomEquation.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/data/Model_base.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/data/Model_delay.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/data/Model_nominal.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/data/infeasible_initial_value/initial_state.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/data/infeasible_initial_value/model_infeasible.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/data/infeasible_initial_value/model_out_of_bounds.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/data/infeasible_initial_value/model_out_of_sym_bounds.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/data/infeasible_initial_value/model_with_bounds.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/data/infeasible_initial_value/model_with_input_series.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/data/infeasible_initial_value/model_with_sym_ystart.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/data/infeasible_initial_value/model_with_xstart.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/data/infeasible_initial_value/model_with_zero_xstart.mo +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/data/infeasible_initial_value/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/data/infeasible_initial_value/timeseries_import_with_x.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/data/initial_state.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/data/parameters.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/data/rtcDataConfig.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/data/rtcParameterConfig.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/data/timeseries_import.csv +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/data/timeseries_import.xml +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/data_path.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/test_csv_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/test_io_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/test_pi_mixin.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/test_problem_class_check.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/simulation/test_simulation.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tests/test_case.py +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tox-teamcity.ini +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/tox.ini +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/uv.lock +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/xsd/rtcDataConfig.xsd +0 -0
- {rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/xsd/rtcSharedTypes.xsd +0 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
name: "Setup Python Environment"
|
|
2
|
+
description: "Sets up Python environment with uv package manager"
|
|
3
|
+
|
|
4
|
+
inputs:
|
|
5
|
+
uv-version:
|
|
6
|
+
description: "Version of uv to install"
|
|
7
|
+
required: false
|
|
8
|
+
default: "0.7.9"
|
|
9
|
+
dependency-groups:
|
|
10
|
+
description: "Space-separated list of dependency groups to install (e.g. 'deploy tests')"
|
|
11
|
+
required: false
|
|
12
|
+
default: ""
|
|
13
|
+
resolution-mode:
|
|
14
|
+
description: "Dependency resolution mode: 'frozen' (use uv.lock), 'lowest' (lowest-direct), 'highest' (upgrade to newest)."
|
|
15
|
+
required: false
|
|
16
|
+
default: "frozen"
|
|
17
|
+
|
|
18
|
+
runs:
|
|
19
|
+
using: "composite"
|
|
20
|
+
steps:
|
|
21
|
+
- name: Install uv
|
|
22
|
+
uses: astral-sh/setup-uv@v5
|
|
23
|
+
with:
|
|
24
|
+
version: ${{ inputs.uv-version }}
|
|
25
|
+
enable-cache: true
|
|
26
|
+
cache-dependency-glob: "uv.lock"
|
|
27
|
+
|
|
28
|
+
- name: Install dependencies
|
|
29
|
+
shell: bash
|
|
30
|
+
run: |
|
|
31
|
+
CMD_PARTS=("uv" "sync")
|
|
32
|
+
|
|
33
|
+
if [[ "${{ inputs.resolution-mode }}" == "lowest" ]]; then
|
|
34
|
+
CMD_PARTS+=("--resolution" "lowest-direct")
|
|
35
|
+
elif [[ "${{ inputs.resolution-mode }}" == "highest" ]]; then
|
|
36
|
+
CMD_PARTS+=("--upgrade")
|
|
37
|
+
else # Default to "frozen"
|
|
38
|
+
CMD_PARTS+=("--frozen")
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
# Always exclude the default 'dev' group unless specific groups are requested that might include dev ones by intent.
|
|
42
|
+
# uv sync --no-dev is the default to exclude [tool.uv.dev-dependencies] or [dependency-groups.dev]
|
|
43
|
+
CMD_PARTS+=("--no-dev")
|
|
44
|
+
|
|
45
|
+
if [[ -n "${{ inputs.dependency-groups }}" ]]; then
|
|
46
|
+
for group in ${{ inputs.dependency-groups }}; do
|
|
47
|
+
CMD_PARTS+=("--group" "$group")
|
|
48
|
+
done
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
echo "Executing: ${CMD_PARTS[*]}"
|
|
52
|
+
"${CMD_PARTS[@]}"
|
|
@@ -42,6 +42,7 @@ jobs:
|
|
|
42
42
|
path: dist/
|
|
43
43
|
|
|
44
44
|
test-linux:
|
|
45
|
+
name: Test Linux (Python ${{ matrix.version }}${{ matrix.label }})
|
|
45
46
|
needs: build
|
|
46
47
|
runs-on: ubuntu-latest
|
|
47
48
|
container:
|
|
@@ -51,17 +52,25 @@ jobs:
|
|
|
51
52
|
TOXENV: py
|
|
52
53
|
strategy:
|
|
53
54
|
matrix:
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
55
|
+
include:
|
|
56
|
+
- version: '3.9' # Also update sonar-project.properties when updating the python versions.
|
|
57
|
+
- version: '3.10'
|
|
58
|
+
- version: '3.11'
|
|
59
|
+
- version: '3.12'
|
|
60
|
+
- version: '3.13'
|
|
61
|
+
# Lowest and highest resolution modes to test oldest and newest dependencies.
|
|
62
|
+
- version: '3.9'
|
|
63
|
+
resolution_mode: 'lowest'
|
|
64
|
+
label: ' (Oldest Dependencies)'
|
|
65
|
+
- version: '3.13'
|
|
66
|
+
resolution_mode: 'highest'
|
|
67
|
+
label: ' (Newest Dependencies)'
|
|
60
68
|
steps:
|
|
61
69
|
- uses: actions/checkout@v4
|
|
62
70
|
- uses: ./.github/actions/setup-python
|
|
63
71
|
with:
|
|
64
72
|
dependency-groups: "tests"
|
|
73
|
+
resolution-mode: ${{ matrix.resolution_mode }}
|
|
65
74
|
- run: uv run tox -vv
|
|
66
75
|
|
|
67
76
|
coverage:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rtc-tools
|
|
3
|
-
Version: 2.8.
|
|
3
|
+
Version: 2.8.0a2
|
|
4
4
|
Summary: Toolbox for control and optimization of water systems.
|
|
5
5
|
Project-URL: Homepage, https://oss.deltares.nl/web/rtc-tools/home
|
|
6
6
|
Project-URL: Download, http://github.com/deltares/rtc-tools/
|
|
@@ -188,13 +188,13 @@ Classifier: Topic :: Scientific/Engineering :: GIS
|
|
|
188
188
|
Classifier: Topic :: Scientific/Engineering :: Mathematics
|
|
189
189
|
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
190
190
|
Requires-Python: >=3.9
|
|
191
|
-
Requires-Dist: casadi!=3.6.6
|
|
191
|
+
Requires-Dist: casadi!=3.6.6,<3.8,>=3.6.3
|
|
192
192
|
Requires-Dist: defusedxml>=0.7.0
|
|
193
193
|
Requires-Dist: importlib-metadata>=5.0.0; python_version < '3.10'
|
|
194
|
-
Requires-Dist: numpy>=1.
|
|
194
|
+
Requires-Dist: numpy>=1.20.0
|
|
195
195
|
Requires-Dist: pymoca==0.9.*,>=0.9.1
|
|
196
196
|
Requires-Dist: rtc-tools-channel-flow>=1.2.0
|
|
197
|
-
Requires-Dist: scipy>=1.
|
|
197
|
+
Requires-Dist: scipy>=1.6.0
|
|
198
198
|
Provides-Extra: all
|
|
199
199
|
Requires-Dist: netcdf4; extra == 'all'
|
|
200
200
|
Provides-Extra: netcdf
|
|
@@ -219,13 +219,11 @@ RTC-Tools offers the following functionalities:
|
|
|
219
219
|
|
|
220
220
|
- **Model building using extensible libraries**: Build complex system models using extensible libraries of model components. Modelers can also implement their custom modeling components, for instance, using the [Modelica language](https://modelica.org/language/) or Python script.
|
|
221
221
|
|
|
222
|
-
RTC-Tools can be used with the following libraries and packages for specific applications
|
|
222
|
+
RTC-Tools can be used with the following libraries and packages for specific applications. Please note that this list is not exhaustive. Users can also create libraries for other types of applications.
|
|
223
223
|
- [rtc-tools-channel-flow](https://gitlab.com/deltares/rtc-tools-channel-flow): water system models
|
|
224
224
|
- [rtc-tools-hydraulic-structures](https://gitlab.com/deltares/rtc-tools-channel-flow): hydraulic assets, such as weirs and pumps
|
|
225
225
|
- [rtc-tools-heat-network](https://github.com/Nieuwe-Warmte-Nu/rtc-tools-heat-network): heat networks
|
|
226
|
-
|
|
227
|
-
Please note that this list is not exhaustive. Users can also create libraries for other types of applications.
|
|
228
|
-
|
|
226
|
+
|
|
229
227
|
- **Running simulations**: Simulate a given model.
|
|
230
228
|
|
|
231
229
|
- **Specifying and solving optimization problems**: Define optimization goals, constraints and decision variables to specify the optimization problem for a given model. RTC-Tools supports both open-source solvers (CBC, HiGHS, Ipopt) and commercial solvers (Gurobi, CPLEX) for solving several types of optimization problems:
|
|
@@ -16,13 +16,11 @@ RTC-Tools offers the following functionalities:
|
|
|
16
16
|
|
|
17
17
|
- **Model building using extensible libraries**: Build complex system models using extensible libraries of model components. Modelers can also implement their custom modeling components, for instance, using the [Modelica language](https://modelica.org/language/) or Python script.
|
|
18
18
|
|
|
19
|
-
RTC-Tools can be used with the following libraries and packages for specific applications
|
|
19
|
+
RTC-Tools can be used with the following libraries and packages for specific applications. Please note that this list is not exhaustive. Users can also create libraries for other types of applications.
|
|
20
20
|
- [rtc-tools-channel-flow](https://gitlab.com/deltares/rtc-tools-channel-flow): water system models
|
|
21
21
|
- [rtc-tools-hydraulic-structures](https://gitlab.com/deltares/rtc-tools-channel-flow): hydraulic assets, such as weirs and pumps
|
|
22
22
|
- [rtc-tools-heat-network](https://github.com/Nieuwe-Warmte-Nu/rtc-tools-heat-network): heat networks
|
|
23
|
-
|
|
24
|
-
Please note that this list is not exhaustive. Users can also create libraries for other types of applications.
|
|
25
|
-
|
|
23
|
+
|
|
26
24
|
- **Running simulations**: Simulate a given model.
|
|
27
25
|
|
|
28
26
|
- **Specifying and solving optimization problems**: Define optimization goals, constraints and decision variables to specify the optimization problem for a given model. RTC-Tools supports both open-source solvers (CBC, HiGHS, Ipopt) and commercial solvers (Gurobi, CPLEX) for solving several types of optimization problems:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Modelica models
|
|
2
2
|
===============
|
|
3
3
|
|
|
4
|
-
To learn the basics of modelling with Modelica, please refer to the online book `Modelica by Example <
|
|
4
|
+
To learn the basics of modelling with Modelica, please refer to the online book `Modelica by Example <https://mbe.modelica.university/>`_.
|
|
5
5
|
|
|
6
6
|
.. autoclass:: rtctools.optimization.modelica_mixin.ModelicaMixin
|
|
7
7
|
:members: compiler_options
|
|
@@ -31,9 +31,9 @@ classifiers = [
|
|
|
31
31
|
"Operating System :: MacOS"
|
|
32
32
|
]
|
|
33
33
|
dependencies = [
|
|
34
|
-
"casadi >= 3.6.3,
|
|
35
|
-
"numpy >= 1.
|
|
36
|
-
"scipy >= 1.
|
|
34
|
+
"casadi >= 3.6.3, < 3.8, !=3.6.6",
|
|
35
|
+
"numpy >= 1.20.0",
|
|
36
|
+
"scipy >= 1.6.0",
|
|
37
37
|
"pymoca >= 0.9.1, == 0.9.*",
|
|
38
38
|
"rtc-tools-channel-flow >= 1.2.0",
|
|
39
39
|
"defusedxml >= 0.7.0",
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import logging
|
|
2
|
+
from typing import Union
|
|
2
3
|
|
|
3
4
|
import casadi as ca
|
|
4
5
|
|
|
5
6
|
logger = logging.getLogger("rtctools")
|
|
6
7
|
|
|
8
|
+
# Limit the number of times we try to substitute in external functions, e.g. in
|
|
9
|
+
# case of infinite recursion. Generally unlikely that we will hit this limit for
|
|
10
|
+
# any reasonable use case.
|
|
11
|
+
MAX_SUBSTITUTE_DEPTH = 10
|
|
12
|
+
|
|
7
13
|
|
|
8
14
|
def is_affine(expr, symbols):
|
|
9
15
|
try:
|
|
@@ -37,12 +43,24 @@ def reduce_matvec(e, v):
|
|
|
37
43
|
return ca.reshape(ca.mtimes(A, v), e.shape)
|
|
38
44
|
|
|
39
45
|
|
|
40
|
-
def substitute_in_external(
|
|
41
|
-
|
|
46
|
+
def substitute_in_external(
|
|
47
|
+
expr: list[ca.MX], symbols: list[ca.MX], values: list[Union[ca.MX, ca.DM, float]]
|
|
48
|
+
):
|
|
49
|
+
# We expect expr to be a list of (at most) length 1
|
|
50
|
+
assert len(expr) <= 1
|
|
51
|
+
|
|
52
|
+
if not expr or len(symbols) == 0 or all(isinstance(x, ca.DM) for x in expr):
|
|
42
53
|
return expr
|
|
54
|
+
elif not expr:
|
|
55
|
+
return []
|
|
43
56
|
else:
|
|
44
|
-
|
|
45
|
-
|
|
57
|
+
for _ in range(MAX_SUBSTITUTE_DEPTH):
|
|
58
|
+
f = ca.Function("f", symbols, expr).expand()
|
|
59
|
+
expr = f.call(values, True, False)
|
|
60
|
+
if expr[0].is_constant():
|
|
61
|
+
break
|
|
62
|
+
|
|
63
|
+
return expr
|
|
46
64
|
|
|
47
65
|
|
|
48
66
|
def interpolate(ts, xs, t, equidistant, mode=0):
|
|
@@ -45,11 +45,17 @@ class CollocatedIntegratedOptimizationProblem(OptimizationProblem, metaclass=ABC
|
|
|
45
45
|
|
|
46
46
|
:cvar check_collocation_linearity:
|
|
47
47
|
If ``True``, check whether collocation constraints are linear. Default is ``True``.
|
|
48
|
+
:cvar inline_delay_expressions:
|
|
49
|
+
If ``True``, delay expressions are inlined into constraints and objectives instead of
|
|
50
|
+
being added as separate equality constraints. Default is ``False``.
|
|
48
51
|
"""
|
|
49
52
|
|
|
50
53
|
#: Check whether the collocation constraints are linear
|
|
51
54
|
check_collocation_linearity = True
|
|
52
55
|
|
|
56
|
+
#: Inline delay expressions instead of adding them as separate equality constraints
|
|
57
|
+
inline_delay_expressions = False
|
|
58
|
+
|
|
53
59
|
#: Whether or not the collocation constraints are linear (affine)
|
|
54
60
|
linear_collocation = None
|
|
55
61
|
|
|
@@ -386,7 +392,9 @@ class CollocatedIntegratedOptimizationProblem(OptimizationProblem, metaclass=ABC
|
|
|
386
392
|
):
|
|
387
393
|
parameter_values = nullvertcat(*parameter_values)
|
|
388
394
|
[parameter_values] = substitute_in_external(
|
|
389
|
-
[parameter_values],
|
|
395
|
+
[parameter_values],
|
|
396
|
+
self.dae_variables["parameters"],
|
|
397
|
+
ca.vertsplit(parameter_values),
|
|
390
398
|
)
|
|
391
399
|
else:
|
|
392
400
|
parameter_values = nullvertcat(*parameter_values)
|
|
@@ -1789,6 +1797,12 @@ class CollocatedIntegratedOptimizationProblem(OptimizationProblem, metaclass=ABC
|
|
|
1789
1797
|
+ [constant_inputs[v.name()] for v in self.dae_variables["constant_inputs"]]
|
|
1790
1798
|
)
|
|
1791
1799
|
|
|
1800
|
+
# If inlining delay expressions, prepare for the single call to ca.substitute()
|
|
1801
|
+
# at the end
|
|
1802
|
+
if self.inline_delay_expressions:
|
|
1803
|
+
delayed_feedback_variable_replacement = ca.MX.zeros(X.numel())
|
|
1804
|
+
delayed_feedback_variable_replacement[:] = X
|
|
1805
|
+
|
|
1792
1806
|
for i in range(len(delayed_feedback_expressions)):
|
|
1793
1807
|
in_variable_name = delayed_feedback_states[i]
|
|
1794
1808
|
expression = delayed_feedback_expressions[i]
|
|
@@ -1855,10 +1869,38 @@ class CollocatedIntegratedOptimizationProblem(OptimizationProblem, metaclass=ABC
|
|
|
1855
1869
|
|
|
1856
1870
|
nominal = nominal_delayed_feedback[i]
|
|
1857
1871
|
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1872
|
+
if self.inline_delay_expressions:
|
|
1873
|
+
# Get the indices for the delayed feedback variable in the optimization
|
|
1874
|
+
# vector
|
|
1875
|
+
indices = self.__indices[ensemble_member][in_canonical]
|
|
1876
|
+
|
|
1877
|
+
# Insert replacement values into appropriate slot
|
|
1878
|
+
delayed_feedback_variable_replacement[indices] = (
|
|
1879
|
+
x_out_delayed / in_nominal / in_sign
|
|
1880
|
+
)
|
|
1881
|
+
|
|
1882
|
+
# Equate delayed feedback variable to zero so that the numerical solver can
|
|
1883
|
+
# remove it from the problem.
|
|
1884
|
+
#
|
|
1885
|
+
# Note: The alternative approach would be to shrink self.solver_input=X,
|
|
1886
|
+
# self.__indices, and any other variables that directly or indirectly
|
|
1887
|
+
# depend on the size and order of 'X'. This would be a complex operation,
|
|
1888
|
+
# which would however be redundant for solvers that (like Ipopt) already
|
|
1889
|
+
# automatically detect and remove variables where lbx==ubx.
|
|
1890
|
+
lbx[indices] = 0.0
|
|
1891
|
+
ubx[indices] = 0.0
|
|
1892
|
+
else:
|
|
1893
|
+
# Default behavior: add delay expressions as equality constraints
|
|
1894
|
+
g.append((x_in - x_out_delayed) / nominal)
|
|
1895
|
+
zeros = np.zeros(n_collocation_times)
|
|
1896
|
+
lbg.extend(zeros)
|
|
1897
|
+
ubg.extend(zeros)
|
|
1898
|
+
|
|
1899
|
+
# If inlining delay expressions, carry out the single call to ca.substitute()
|
|
1900
|
+
# A single call is more efficient as it constructs a single ca.Function internally,
|
|
1901
|
+
# rather than one for each element of the list.
|
|
1902
|
+
if self.inline_delay_expressions:
|
|
1903
|
+
g = [ca.substitute(ca.vertcat(*g), X, delayed_feedback_variable_replacement)]
|
|
1862
1904
|
|
|
1863
1905
|
# Objective
|
|
1864
1906
|
f_member = self.objective(ensemble_member)
|
|
@@ -203,12 +203,12 @@ class OptimizationProblem(DataStoreAccessor, metaclass=ABCMeta):
|
|
|
203
203
|
log_level = logging.INFO
|
|
204
204
|
logger.log(
|
|
205
205
|
log_level,
|
|
206
|
-
"Solver
|
|
206
|
+
"Solver failed with status {} ({}).".format(return_status, wall_clock_time),
|
|
207
207
|
)
|
|
208
208
|
except (AttributeError, ValueError):
|
|
209
209
|
logger.log(
|
|
210
210
|
log_level,
|
|
211
|
-
"Solver
|
|
211
|
+
"Solver failed with status {} ({}).".format(return_status, wall_clock_time),
|
|
212
212
|
)
|
|
213
213
|
|
|
214
214
|
# Do any postprocessing
|
|
@@ -7,8 +7,11 @@ model ModelSymbolicParameters
|
|
|
7
7
|
|
|
8
8
|
parameter Real k = 1.0;
|
|
9
9
|
|
|
10
|
+
parameter Real a = -1.0;
|
|
11
|
+
parameter Real b = 2.0;
|
|
12
|
+
parameter Real u_min = a * b;
|
|
10
13
|
parameter Real u_max;
|
|
11
|
-
input Real u(fixed=false, min =
|
|
14
|
+
input Real u(fixed=false, min = u_min, max = u_max);
|
|
12
15
|
equation
|
|
13
16
|
der(x) = k * x + u;
|
|
14
17
|
der(w) = x;
|
|
@@ -17,13 +17,14 @@ logger.setLevel(logging.DEBUG)
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
class Model(ModelicaMixin, CollocatedIntegratedOptimizationProblem):
|
|
20
|
-
def __init__(self):
|
|
20
|
+
def __init__(self, inline_delay_expressions=False):
|
|
21
21
|
super().__init__(
|
|
22
22
|
input_folder=data_path(),
|
|
23
23
|
output_folder=data_path(),
|
|
24
24
|
model_name="ModelDelay",
|
|
25
25
|
model_folder=data_path(),
|
|
26
26
|
)
|
|
27
|
+
self.inline_delay_expressions = inline_delay_expressions
|
|
27
28
|
|
|
28
29
|
def times(self, variable=None):
|
|
29
30
|
# Collocation points
|
|
@@ -63,7 +64,8 @@ class ModelCompleteHistory(Model):
|
|
|
63
64
|
|
|
64
65
|
class TestDelayHistoryWarnings(TestCase, unittest.TestCase):
|
|
65
66
|
def test_no_history(self):
|
|
66
|
-
|
|
67
|
+
# Test default mode
|
|
68
|
+
problem = ModelNoHistory(inline_delay_expressions=False)
|
|
67
69
|
with self.assertLogs(logger, level="WARN") as cm:
|
|
68
70
|
problem.optimize()
|
|
69
71
|
self.assertEqual(
|
|
@@ -75,6 +77,31 @@ class TestDelayHistoryWarnings(TestCase, unittest.TestCase):
|
|
|
75
77
|
"Extrapolating t0 value backwards in time.",
|
|
76
78
|
],
|
|
77
79
|
)
|
|
80
|
+
results = problem.extract_results()
|
|
81
|
+
|
|
82
|
+
# Test inline mode
|
|
83
|
+
problem_inline = ModelNoHistory(inline_delay_expressions=True)
|
|
84
|
+
with self.assertLogs(logger, level="WARN") as cm:
|
|
85
|
+
problem_inline.optimize()
|
|
86
|
+
self.assertEqual(
|
|
87
|
+
cm.output,
|
|
88
|
+
[
|
|
89
|
+
"WARNING:rtctools:Incomplete history for delayed expression x. "
|
|
90
|
+
"Extrapolating t0 value backwards in time.",
|
|
91
|
+
"WARNING:rtctools:Incomplete history for delayed expression w. "
|
|
92
|
+
"Extrapolating t0 value backwards in time.",
|
|
93
|
+
],
|
|
94
|
+
)
|
|
95
|
+
results_inline = problem_inline.extract_results()
|
|
96
|
+
|
|
97
|
+
# Check that the results align
|
|
98
|
+
self.assertAlmostEqual(results["x"], results_inline["x"], 1e-6)
|
|
99
|
+
self.assertAlmostEqual(results["w"], results_inline["w"], 1e-6)
|
|
100
|
+
|
|
101
|
+
# Check that the inline results has fewer constraints
|
|
102
|
+
self.assertLess(
|
|
103
|
+
len(problem_inline.transcribed_problem["lbg"]), len(problem.transcribed_problem["lbg"])
|
|
104
|
+
)
|
|
78
105
|
|
|
79
106
|
def test_partial_history(self):
|
|
80
107
|
problem = ModelPartialHistory()
|
|
@@ -266,7 +266,10 @@ class ModelHistory(Model):
|
|
|
266
266
|
|
|
267
267
|
|
|
268
268
|
class ModelSymbolicParameters(ModelicaMixin, CollocatedIntegratedOptimizationProblem):
|
|
269
|
-
def __init__(self):
|
|
269
|
+
def __init__(self, resolve_parameters=True, override_u_min=True):
|
|
270
|
+
self.__resolve_parameters = resolve_parameters
|
|
271
|
+
self.__override_u_min = override_u_min
|
|
272
|
+
|
|
270
273
|
super().__init__(
|
|
271
274
|
input_folder=data_path(),
|
|
272
275
|
output_folder=data_path(),
|
|
@@ -283,6 +286,10 @@ class ModelSymbolicParameters(ModelicaMixin, CollocatedIntegratedOptimizationPro
|
|
|
283
286
|
parameters["u_max"] = 2.0
|
|
284
287
|
parameters["x_initial"] = 1.1
|
|
285
288
|
parameters["w_seed"] = 0.2
|
|
289
|
+
parameters["a"] = -2.0
|
|
290
|
+
|
|
291
|
+
if self.__override_u_min:
|
|
292
|
+
parameters["u_min"] = -1.5
|
|
286
293
|
return parameters
|
|
287
294
|
|
|
288
295
|
def objective(self, ensemble_member):
|
|
@@ -294,6 +301,11 @@ class ModelSymbolicParameters(ModelicaMixin, CollocatedIntegratedOptimizationPro
|
|
|
294
301
|
compiler_options = super().compiler_options()
|
|
295
302
|
compiler_options["cache"] = False
|
|
296
303
|
compiler_options["library_folders"] = []
|
|
304
|
+
|
|
305
|
+
if not self.__resolve_parameters:
|
|
306
|
+
compiler_options["replace_parameter_expressions"] = False
|
|
307
|
+
compiler_options["resolve_parameter_values"] = False
|
|
308
|
+
|
|
297
309
|
return compiler_options
|
|
298
310
|
|
|
299
311
|
|
|
@@ -621,6 +633,45 @@ class TestModelicaMixinSymbolicParameters(TestCase, unittest.TestCase):
|
|
|
621
633
|
self.assertAlmostEqual(self.problem.extract_results()["x"][0], 1.1, self.tolerance)
|
|
622
634
|
|
|
623
635
|
|
|
636
|
+
class TestModelicaMixinSymbolicParametersResolve(TestCase, unittest.TestCase):
|
|
637
|
+
def test_parameters_resolve_or_not(self):
|
|
638
|
+
"""
|
|
639
|
+
We set a 'default' value of u_min = a * b in the Pymoca model. If we
|
|
640
|
+
tell pymoca to replace parameter expressions (default behavior), we can
|
|
641
|
+
no longer override 'u_min' via the parameters() method. If we tell
|
|
642
|
+
Pymoca to _not_ inline, we expect to be able to override 'u_min', but
|
|
643
|
+
for it to also still have the default value of a * b.
|
|
644
|
+
"""
|
|
645
|
+
problem = ModelSymbolicParameters()
|
|
646
|
+
problem.optimize()
|
|
647
|
+
parameters = problem.parameters(0)
|
|
648
|
+
bounds = problem.bounds()
|
|
649
|
+
|
|
650
|
+
# Check that overriding "u_min" has no effect if parameters are resolved
|
|
651
|
+
self.assertNotEqual(bounds["u"][0], parameters["u_min"])
|
|
652
|
+
|
|
653
|
+
# Check that overriding "u_min" has effect if parameters are not resolved
|
|
654
|
+
problem_no_resolved = ModelSymbolicParameters(resolve_parameters=False)
|
|
655
|
+
problem_no_resolved.optimize()
|
|
656
|
+
parameters_no_resolved = problem_no_resolved.parameters(0)
|
|
657
|
+
bounds_no_resolved = problem_no_resolved.bounds()
|
|
658
|
+
|
|
659
|
+
self.assertEqual(bounds_no_resolved["u"][0], parameters_no_resolved["u_min"])
|
|
660
|
+
|
|
661
|
+
# Check that if we do not override "u_min", it takes the default value a
|
|
662
|
+
# * b, and that overriding the value of 'a' works.
|
|
663
|
+
problem_no_override = ModelSymbolicParameters(
|
|
664
|
+
resolve_parameters=False, override_u_min=False
|
|
665
|
+
)
|
|
666
|
+
problem_no_override.optimize()
|
|
667
|
+
parameters_no_override = problem_no_override.parameters(0)
|
|
668
|
+
bounds_no_override = problem_no_override.bounds()
|
|
669
|
+
|
|
670
|
+
self.assertEqual(
|
|
671
|
+
bounds_no_override["u"][0], parameters_no_override["a"] * parameters_no_override["b"]
|
|
672
|
+
)
|
|
673
|
+
|
|
674
|
+
|
|
624
675
|
class ModelAliasBounds(Model):
|
|
625
676
|
def bounds(self):
|
|
626
677
|
bounds = super().bounds()
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
name: "Setup Python Environment"
|
|
2
|
-
description: "Sets up Python environment with uv package manager"
|
|
3
|
-
|
|
4
|
-
inputs:
|
|
5
|
-
uv-version:
|
|
6
|
-
description: "Version of uv to install"
|
|
7
|
-
required: false
|
|
8
|
-
default: "0.7.9"
|
|
9
|
-
dependency-groups:
|
|
10
|
-
description: "Space-separated list of dependency groups to install (e.g. 'deploy tests')"
|
|
11
|
-
required: false
|
|
12
|
-
default: ""
|
|
13
|
-
|
|
14
|
-
runs:
|
|
15
|
-
using: "composite"
|
|
16
|
-
steps:
|
|
17
|
-
- name: Install uv
|
|
18
|
-
uses: astral-sh/setup-uv@v5
|
|
19
|
-
with:
|
|
20
|
-
version: ${{ inputs.uv-version }}
|
|
21
|
-
enable-cache: true
|
|
22
|
-
cache-dependency-glob: "uv.lock"
|
|
23
|
-
|
|
24
|
-
- name: Install dependencies
|
|
25
|
-
shell: bash
|
|
26
|
-
run: |
|
|
27
|
-
CMD="uv sync --frozen --no-dev"
|
|
28
|
-
if [[ -n "${{ inputs.dependency-groups }}" ]]; then
|
|
29
|
-
for group in ${{ inputs.dependency-groups }}; do
|
|
30
|
-
CMD="$CMD --group $group"
|
|
31
|
-
done
|
|
32
|
-
fi
|
|
33
|
-
$CMD
|
|
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
|
{rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/optimization/pumped_hydropower_system.rst
RENAMED
|
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
|
{rtc_tools-2.8.0a0 → rtc_tools-2.8.0a2}/doc/examples/pyplots/pumped_hydropower_system_results.py
RENAMED
|
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
|