rtc-tools 2.8.0.dev0__tar.gz → 2.8.0rc1__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.
Files changed (451) hide show
  1. rtc_tools-2.8.0rc1/.codecov.yml +12 -0
  2. rtc_tools-2.8.0rc1/.coveragerc +15 -0
  3. rtc_tools-2.8.0rc1/.git-blame-ignore-revs +35 -0
  4. rtc_tools-2.8.0rc1/.github/actions/setup-python/action.yml +55 -0
  5. rtc_tools-2.8.0rc1/.github/workflows/ci.yml +153 -0
  6. rtc_tools-2.8.0rc1/.gitignore +33 -0
  7. rtc_tools-2.8.0rc1/.pre-commit-config.yaml +7 -0
  8. rtc_tools-2.8.0rc1/.readthedocs.yaml +26 -0
  9. rtc_tools-2.8.0rc1/AUTHORS +13 -0
  10. rtc_tools-2.8.0rc1/CHARTER.md +127 -0
  11. rtc_tools-2.8.0rc1/CONTRIBUTING.md +238 -0
  12. rtc_tools-2.8.0rc1/COPYING +674 -0
  13. rtc_tools-2.8.0rc1/GOVERNANCE.md +198 -0
  14. rtc_tools-2.8.0rc1/PKG-INFO +338 -0
  15. rtc_tools-2.8.0rc1/README.md +135 -0
  16. rtc_tools-2.8.0rc1/doc/.gitignore +1 -0
  17. rtc_tools-2.8.0rc1/doc/Makefile +225 -0
  18. rtc_tools-2.8.0rc1/doc/_static/external_links.js +8 -0
  19. rtc_tools-2.8.0rc1/doc/_static/theme_overrides.css +18 -0
  20. rtc_tools-2.8.0rc1/doc/conf.py +392 -0
  21. rtc_tools-2.8.0rc1/doc/examples/optimization/basic.rst +223 -0
  22. rtc_tools-2.8.0rc1/doc/examples/optimization/cascading_channels.rst +168 -0
  23. rtc_tools-2.8.0rc1/doc/examples/optimization/channel_pulse.rst +104 -0
  24. rtc_tools-2.8.0rc1/doc/examples/optimization/channel_wave_damping.rst +198 -0
  25. rtc_tools-2.8.0rc1/doc/examples/optimization/debugging.rst +29 -0
  26. rtc_tools-2.8.0rc1/doc/examples/optimization/ensemble.rst +283 -0
  27. rtc_tools-2.8.0rc1/doc/examples/optimization/fallback_options.rst +116 -0
  28. rtc_tools-2.8.0rc1/doc/examples/optimization/goal_programming.rst +296 -0
  29. rtc_tools-2.8.0rc1/doc/examples/optimization/integrator_delay.rst +55 -0
  30. rtc_tools-2.8.0rc1/doc/examples/optimization/lookup_table.rst +232 -0
  31. rtc_tools-2.8.0rc1/doc/examples/optimization/mixed_integer.rst +210 -0
  32. rtc_tools-2.8.0rc1/doc/examples/optimization/pumped_hydropower_system.rst +249 -0
  33. rtc_tools-2.8.0rc1/doc/examples/optimization.rst +20 -0
  34. rtc_tools-2.8.0rc1/doc/examples/pyplots/basic_results.py +71 -0
  35. rtc_tools-2.8.0rc1/doc/examples/pyplots/cascading_channels_results.py +135 -0
  36. rtc_tools-2.8.0rc1/doc/examples/pyplots/channel_pulse_results.py +164 -0
  37. rtc_tools-2.8.0rc1/doc/examples/pyplots/channel_wave_damping.py +164 -0
  38. rtc_tools-2.8.0rc1/doc/examples/pyplots/ensemble_results.py +109 -0
  39. rtc_tools-2.8.0rc1/doc/examples/pyplots/goal_programming_results.py +70 -0
  40. rtc_tools-2.8.0rc1/doc/examples/pyplots/integrator_delay.py +60 -0
  41. rtc_tools-2.8.0rc1/doc/examples/pyplots/lookup_table_results.py +52 -0
  42. rtc_tools-2.8.0rc1/doc/examples/pyplots/mixed_integer_results.py +58 -0
  43. rtc_tools-2.8.0rc1/doc/examples/pyplots/pumped_hydropower_system_results.py +75 -0
  44. rtc_tools-2.8.0rc1/doc/examples/pyplots/simulation_results.py +67 -0
  45. rtc_tools-2.8.0rc1/doc/examples/simulation/custom_equation.rst +40 -0
  46. rtc_tools-2.8.0rc1/doc/examples/simulation/setpoint.rst +213 -0
  47. rtc_tools-2.8.0rc1/doc/examples/simulation.rst +10 -0
  48. rtc_tools-2.8.0rc1/doc/examples.rst +10 -0
  49. rtc_tools-2.8.0rc1/doc/getting-started.rst +142 -0
  50. rtc_tools-2.8.0rc1/doc/images/Lake-Hartwell-24012016.jpg +0 -0
  51. rtc_tools-2.8.0rc1/doc/images/PumpedStoragePlant_openmodelica.png +0 -0
  52. rtc_tools-2.8.0rc1/doc/images/Woudagemaal.jpg +0 -0
  53. rtc_tools-2.8.0rc1/doc/images/basic_example_console.png +0 -0
  54. rtc_tools-2.8.0rc1/doc/images/cascading_channels_omedit.png +0 -0
  55. rtc_tools-2.8.0rc1/doc/images/channel_impulse_xs.png +0 -0
  56. rtc_tools-2.8.0rc1/doc/images/channel_wave_damping_omedit.png +0 -0
  57. rtc_tools-2.8.0rc1/doc/images/graig-coch-2117306_640.jpg +0 -0
  58. rtc_tools-2.8.0rc1/doc/images/integrator_delay_modelica.png +0 -0
  59. rtc_tools-2.8.0rc1/doc/images/lavant-2976738_1280.jpg +0 -0
  60. rtc_tools-2.8.0rc1/doc/images/orifice_vs_pump_openmodelica.png +0 -0
  61. rtc_tools-2.8.0rc1/doc/images/pont-du-gard-1742029_1280.jpg +0 -0
  62. rtc_tools-2.8.0rc1/doc/images/rtc-tools-horizontal-color.svg +43 -0
  63. rtc_tools-2.8.0rc1/doc/images/rtc-tools-horizontal-white.svg +27 -0
  64. rtc_tools-2.8.0rc1/doc/images/simple_storage_openmodelica.png +0 -0
  65. rtc_tools-2.8.0rc1/doc/images/single_channel.png +0 -0
  66. rtc_tools-2.8.0rc1/doc/images/single_channel_hec-ras.png +0 -0
  67. rtc_tools-2.8.0rc1/doc/index.rst +97 -0
  68. rtc_tools-2.8.0rc1/doc/make.bat +281 -0
  69. rtc_tools-2.8.0rc1/doc/optimization/basics.rst +12 -0
  70. rtc_tools-2.8.0rc1/doc/optimization/csv_io.rst +6 -0
  71. rtc_tools-2.8.0rc1/doc/optimization/fews_io.rst +16 -0
  72. rtc_tools-2.8.0rc1/doc/optimization/forecast_uncertainty.rst +10 -0
  73. rtc_tools-2.8.0rc1/doc/optimization/goal_programming/converting_goals_to_constraints.rst +55 -0
  74. rtc_tools-2.8.0rc1/doc/optimization/goal_programming/goals.rst +14 -0
  75. rtc_tools-2.8.0rc1/doc/optimization/goal_programming/linearized_order.rst +14 -0
  76. rtc_tools-2.8.0rc1/doc/optimization/goal_programming/main_idea.rst +70 -0
  77. rtc_tools-2.8.0rc1/doc/optimization/goal_programming/minimize_absolute_value.rst +14 -0
  78. rtc_tools-2.8.0rc1/doc/optimization/homotopy.rst +8 -0
  79. rtc_tools-2.8.0rc1/doc/optimization/initial_state_estimation.rst +6 -0
  80. rtc_tools-2.8.0rc1/doc/optimization/linearization.rst +6 -0
  81. rtc_tools-2.8.0rc1/doc/optimization/lookup_tables.rst +10 -0
  82. rtc_tools-2.8.0rc1/doc/optimization/modelica_models.rst +8 -0
  83. rtc_tools-2.8.0rc1/doc/optimization/multi_objective.rst +13 -0
  84. rtc_tools-2.8.0rc1/doc/optimization/solver_configuration.rst +70 -0
  85. rtc_tools-2.8.0rc1/doc/optimization/time_discretization.rst +6 -0
  86. rtc_tools-2.8.0rc1/doc/optimization.rst +20 -0
  87. rtc_tools-2.8.0rc1/doc/related-projects.rst +30 -0
  88. rtc_tools-2.8.0rc1/doc/simulation/basics.rst +8 -0
  89. rtc_tools-2.8.0rc1/doc/simulation/csv_io.rst +6 -0
  90. rtc_tools-2.8.0rc1/doc/simulation/fews_io.rst +6 -0
  91. rtc_tools-2.8.0rc1/doc/simulation.rst +15 -0
  92. rtc_tools-2.8.0rc1/examples/basic/input/initial_state.csv +2 -0
  93. rtc_tools-2.8.0rc1/examples/basic/input/timeseries_import.csv +13 -0
  94. rtc_tools-2.8.0rc1/examples/basic/model/Example.mo +15 -0
  95. rtc_tools-2.8.0rc1/examples/basic/reference_output/timeseries_export.csv +13 -0
  96. rtc_tools-2.8.0rc1/examples/basic/src/example.py +29 -0
  97. rtc_tools-2.8.0rc1/examples/cascading_channels/input/initial_state.csv +2 -0
  98. rtc_tools-2.8.0rc1/examples/cascading_channels/input/timeseries_import.csv +49 -0
  99. rtc_tools-2.8.0rc1/examples/cascading_channels/model/.gitignore +1 -0
  100. rtc_tools-2.8.0rc1/examples/cascading_channels/model/Example.mo +70 -0
  101. rtc_tools-2.8.0rc1/examples/cascading_channels/reference_output/timeseries_export.csv +49 -0
  102. rtc_tools-2.8.0rc1/examples/cascading_channels/src/example.py +89 -0
  103. rtc_tools-2.8.0rc1/examples/channel_pulse/HEC-RAS.zip +0 -0
  104. rtc_tools-2.8.0rc1/examples/channel_pulse/input/timeseries_import.csv +192 -0
  105. rtc_tools-2.8.0rc1/examples/channel_pulse/model/Example.mo +41 -0
  106. rtc_tools-2.8.0rc1/examples/channel_pulse/reference_output/HEC-RAS_export.csv +192 -0
  107. rtc_tools-2.8.0rc1/examples/channel_pulse/reference_output/timeseries_export.csv +192 -0
  108. rtc_tools-2.8.0rc1/examples/channel_pulse/reference_output/timeseries_export_inertial_wave.csv +192 -0
  109. rtc_tools-2.8.0rc1/examples/channel_pulse/reference_output/timeseries_export_inertial_wave_semi_implicit.csv +192 -0
  110. rtc_tools-2.8.0rc1/examples/channel_pulse/reference_output/timeseries_export_saint_venant.csv +192 -0
  111. rtc_tools-2.8.0rc1/examples/channel_pulse/reference_output/timeseries_export_saint_venant_upwind.csv +192 -0
  112. rtc_tools-2.8.0rc1/examples/channel_pulse/src/example.py +90 -0
  113. rtc_tools-2.8.0rc1/examples/channel_wave_damping/input/timeseries_import.csv +119 -0
  114. rtc_tools-2.8.0rc1/examples/channel_wave_damping/model/Example.mo +70 -0
  115. rtc_tools-2.8.0rc1/examples/channel_wave_damping/model/ExampleLocalControl.mo +24 -0
  116. rtc_tools-2.8.0rc1/examples/channel_wave_damping/model/ExampleOptimization.mo +5 -0
  117. rtc_tools-2.8.0rc1/examples/channel_wave_damping/model/PIDController.mo +17 -0
  118. rtc_tools-2.8.0rc1/examples/channel_wave_damping/output/.gitignore +0 -0
  119. rtc_tools-2.8.0rc1/examples/channel_wave_damping/reference_output/timeseries_export.csv +703 -0
  120. rtc_tools-2.8.0rc1/examples/channel_wave_damping/reference_output/timeseries_export_local_control.csv +703 -0
  121. rtc_tools-2.8.0rc1/examples/channel_wave_damping/src/example_local_control.py +27 -0
  122. rtc_tools-2.8.0rc1/examples/channel_wave_damping/src/example_optimization.py +52 -0
  123. rtc_tools-2.8.0rc1/examples/channel_wave_damping/src/steady_state_initialization_mixin.py +14 -0
  124. rtc_tools-2.8.0rc1/examples/channel_wave_damping/src/step_size_parameter_mixin.py +16 -0
  125. rtc_tools-2.8.0rc1/examples/ensemble/input/.gitignore +2 -0
  126. rtc_tools-2.8.0rc1/examples/ensemble/input/ensemble.csv +3 -0
  127. rtc_tools-2.8.0rc1/examples/ensemble/input/forecast1/.gitignore +1 -0
  128. rtc_tools-2.8.0rc1/examples/ensemble/input/forecast1/initial_state.csv +2 -0
  129. rtc_tools-2.8.0rc1/examples/ensemble/input/forecast1/timeseries_import.csv +13 -0
  130. rtc_tools-2.8.0rc1/examples/ensemble/input/forecast2/.gitignore +1 -0
  131. rtc_tools-2.8.0rc1/examples/ensemble/input/forecast2/initial_state.csv +2 -0
  132. rtc_tools-2.8.0rc1/examples/ensemble/input/forecast2/timeseries_import.csv +13 -0
  133. rtc_tools-2.8.0rc1/examples/ensemble/input/lookup_tables/.gitignore +1 -0
  134. rtc_tools-2.8.0rc1/examples/ensemble/input/lookup_tables/curvefit_options.ini +2 -0
  135. rtc_tools-2.8.0rc1/examples/ensemble/input/lookup_tables/storage_V.csv +8 -0
  136. rtc_tools-2.8.0rc1/examples/ensemble/model/Example.mo +13 -0
  137. rtc_tools-2.8.0rc1/examples/ensemble/output/forecast1/.gitignore +0 -0
  138. rtc_tools-2.8.0rc1/examples/ensemble/output/forecast2/.gitignore +0 -0
  139. rtc_tools-2.8.0rc1/examples/ensemble/reference_output/forecast1/timeseries_export.csv +13 -0
  140. rtc_tools-2.8.0rc1/examples/ensemble/reference_output/forecast2/timeseries_export.csv +13 -0
  141. rtc_tools-2.8.0rc1/examples/ensemble/src/example.py +142 -0
  142. rtc_tools-2.8.0rc1/examples/fallback_option/output/.gitignore +0 -0
  143. rtc_tools-2.8.0rc1/examples/fallback_option/src/example.py +83 -0
  144. rtc_tools-2.8.0rc1/examples/fallback_option/src/example_with_gp.py +117 -0
  145. rtc_tools-2.8.0rc1/examples/goal_programming/input/initial_state.csv +2 -0
  146. rtc_tools-2.8.0rc1/examples/goal_programming/input/timeseries_import.csv +22 -0
  147. rtc_tools-2.8.0rc1/examples/goal_programming/model/Example.mo +25 -0
  148. rtc_tools-2.8.0rc1/examples/goal_programming/output/.gitignore +0 -0
  149. rtc_tools-2.8.0rc1/examples/goal_programming/reference_output/timeseries_export.csv +22 -0
  150. rtc_tools-2.8.0rc1/examples/goal_programming/src/example.py +177 -0
  151. rtc_tools-2.8.0rc1/examples/integrator_delay/input/initial_state.csv +2 -0
  152. rtc_tools-2.8.0rc1/examples/integrator_delay/input/timeseries_import.csv +11 -0
  153. rtc_tools-2.8.0rc1/examples/integrator_delay/input/timeseries_import_simulation.csv +11 -0
  154. rtc_tools-2.8.0rc1/examples/integrator_delay/model/Example.mo +31 -0
  155. rtc_tools-2.8.0rc1/examples/integrator_delay/src/example.py +49 -0
  156. rtc_tools-2.8.0rc1/examples/lookup_table/input/.gitignore +2 -0
  157. rtc_tools-2.8.0rc1/examples/lookup_table/input/initial_state.csv +2 -0
  158. rtc_tools-2.8.0rc1/examples/lookup_table/input/lookup_tables/.gitignore +1 -0
  159. rtc_tools-2.8.0rc1/examples/lookup_table/input/lookup_tables/curvefit_options.ini +2 -0
  160. rtc_tools-2.8.0rc1/examples/lookup_table/input/lookup_tables/storage_V.csv +8 -0
  161. rtc_tools-2.8.0rc1/examples/lookup_table/input/timeseries_import.csv +13 -0
  162. rtc_tools-2.8.0rc1/examples/lookup_table/model/Example.mo +13 -0
  163. rtc_tools-2.8.0rc1/examples/lookup_table/output/.gitignore +0 -0
  164. rtc_tools-2.8.0rc1/examples/lookup_table/reference_output/timeseries_export.csv +13 -0
  165. rtc_tools-2.8.0rc1/examples/lookup_table/src/example.py +112 -0
  166. rtc_tools-2.8.0rc1/examples/mixed_integer/input/initial_state.csv +2 -0
  167. rtc_tools-2.8.0rc1/examples/mixed_integer/input/timeseries_import.csv +22 -0
  168. rtc_tools-2.8.0rc1/examples/mixed_integer/model/Example.mo +25 -0
  169. rtc_tools-2.8.0rc1/examples/mixed_integer/output/.gitignore +0 -0
  170. rtc_tools-2.8.0rc1/examples/mixed_integer/reference_output/timeseries_export.csv +22 -0
  171. rtc_tools-2.8.0rc1/examples/mixed_integer/src/example.py +93 -0
  172. rtc_tools-2.8.0rc1/examples/pumped_hydropower_system/input/initial_state.csv +2 -0
  173. rtc_tools-2.8.0rc1/examples/pumped_hydropower_system/input/timeseries_import.csv +22 -0
  174. rtc_tools-2.8.0rc1/examples/pumped_hydropower_system/model/PumpedStoragePlant.mo +80 -0
  175. rtc_tools-2.8.0rc1/examples/pumped_hydropower_system/output/.gitignore +0 -0
  176. rtc_tools-2.8.0rc1/examples/pumped_hydropower_system/reference_output/timeseries_export.csv +22 -0
  177. rtc_tools-2.8.0rc1/examples/pumped_hydropower_system/src/example.py +154 -0
  178. rtc_tools-2.8.0rc1/examples/simulation/input/parameters.csv +2 -0
  179. rtc_tools-2.8.0rc1/examples/simulation/input/timeseries_import.csv +13 -0
  180. rtc_tools-2.8.0rc1/examples/simulation/model/Example.mo +19 -0
  181. rtc_tools-2.8.0rc1/examples/simulation/output/.gitignore +0 -0
  182. rtc_tools-2.8.0rc1/examples/simulation/reference_output/timeseries_export.csv +13 -0
  183. rtc_tools-2.8.0rc1/examples/simulation/src/example.py +50 -0
  184. rtc_tools-2.8.0rc1/examples/simulation_with_custom_equations/input/initial_state.csv +2 -0
  185. rtc_tools-2.8.0rc1/examples/simulation_with_custom_equations/input/timeseries_import.csv +7 -0
  186. rtc_tools-2.8.0rc1/examples/simulation_with_custom_equations/model/SimpleModel.mo +6 -0
  187. rtc_tools-2.8.0rc1/examples/simulation_with_custom_equations/output/.gitignore +0 -0
  188. rtc_tools-2.8.0rc1/examples/simulation_with_custom_equations/reference_output/timeseries_export.csv +7 -0
  189. rtc_tools-2.8.0rc1/examples/simulation_with_custom_equations/src/simple_model.py +43 -0
  190. rtc_tools-2.8.0rc1/examples/single_reservoir/input/initial_state.csv +2 -0
  191. rtc_tools-2.8.0rc1/examples/single_reservoir/input/timeseries_import.csv +12 -0
  192. rtc_tools-2.8.0rc1/examples/single_reservoir/model/single_reservoir.mo +15 -0
  193. rtc_tools-2.8.0rc1/examples/single_reservoir/output/.gitignore +0 -0
  194. rtc_tools-2.8.0rc1/examples/single_reservoir/reference_output/timeseries_export.csv +12 -0
  195. rtc_tools-2.8.0rc1/examples/single_reservoir/src/single_reservoir.py +76 -0
  196. rtc_tools-2.8.0rc1/pyproject.toml +108 -0
  197. rtc_tools-2.8.0rc1/sonar-project.properties +15 -0
  198. rtc_tools-2.8.0rc1/src/rtctools/__init__.py +3 -0
  199. rtc_tools-2.8.0rc1/src/rtctools/_internal/__init__.py +0 -0
  200. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/_internal/alias_tools.py +7 -7
  201. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/_internal/caching.py +1 -1
  202. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/_internal/casadi_helpers.py +39 -3
  203. rtc_tools-2.8.0rc1/src/rtctools/_internal/casadi_to_lp.py +424 -0
  204. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/_internal/debug_check_helpers.py +2 -2
  205. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/data/csv.py +9 -12
  206. rtc_tools-2.8.0rc1/src/rtctools/data/interpolation/__init__.py +5 -0
  207. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/data/interpolation/bspline1d.py +1 -1
  208. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/data/netcdf.py +9 -9
  209. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/data/pi.py +65 -54
  210. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/data/rtc.py +13 -16
  211. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/data/storage.py +22 -30
  212. rtc_tools-2.8.0rc1/src/rtctools/optimization/__init__.py +0 -0
  213. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/optimization/collocated_integrated_optimization_problem.py +249 -141
  214. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/optimization/control_tree_mixin.py +4 -5
  215. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/optimization/csv_lookup_table_mixin.py +25 -33
  216. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/optimization/csv_mixin.py +8 -8
  217. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/optimization/goal_programming_mixin.py +7 -6
  218. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/optimization/goal_programming_mixin_base.py +44 -51
  219. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/optimization/homotopy_mixin.py +2 -3
  220. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/optimization/initial_state_estimation_mixin.py +2 -4
  221. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/optimization/io_mixin.py +16 -20
  222. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/optimization/linearization_mixin.py +1 -3
  223. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/optimization/linearized_order_goal_programming_mixin.py +5 -7
  224. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/optimization/min_abs_goal_programming_mixin.py +14 -15
  225. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/optimization/modelica_mixin.py +26 -41
  226. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/optimization/netcdf_mixin.py +8 -9
  227. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/optimization/optimization_problem.py +170 -64
  228. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/optimization/pi_mixin.py +13 -19
  229. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/optimization/single_pass_goal_programming_mixin.py +27 -7
  230. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/optimization/timeseries.py +2 -4
  231. rtc_tools-2.8.0rc1/src/rtctools/rtctoolsapp.py +165 -0
  232. rtc_tools-2.8.0rc1/src/rtctools/simulation/__init__.py +0 -0
  233. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/simulation/csv_mixin.py +8 -10
  234. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/simulation/io_mixin.py +6 -6
  235. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/simulation/pi_mixin.py +13 -23
  236. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/simulation/simulation_problem.py +37 -44
  237. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/util.py +41 -15
  238. rtc_tools-2.8.0rc1/src/rtctools/version.py +51 -0
  239. rtc_tools-2.8.0rc1/tests/__init__.py +0 -0
  240. rtc_tools-2.8.0rc1/tests/data/__init__.py +0 -0
  241. rtc_tools-2.8.0rc1/tests/data/data/.gitignore +2 -0
  242. rtc_tools-2.8.0rc1/tests/data/data/curve.dat +0 -0
  243. rtc_tools-2.8.0rc1/tests/data/data/diag.xml +22 -0
  244. rtc_tools-2.8.0rc1/tests/data/data/initial_state_0.csv +2 -0
  245. rtc_tools-2.8.0rc1/tests/data/data/initial_state_1.csv +2 -0
  246. rtc_tools-2.8.0rc1/tests/data/data/look_up_table_0.csv +8 -0
  247. rtc_tools-2.8.0rc1/tests/data/data/look_up_table_1.csv +8 -0
  248. rtc_tools-2.8.0rc1/tests/data/data/look_up_table_2.csv +8 -0
  249. rtc_tools-2.8.0rc1/tests/data/data/pi_run.xml +8 -0
  250. rtc_tools-2.8.0rc1/tests/data/data/rtcDataConfig.xml +10 -0
  251. rtc_tools-2.8.0rc1/tests/data/data/rtcParameterConfig.xml +16 -0
  252. rtc_tools-2.8.0rc1/tests/data/data/surface.dat +0 -0
  253. rtc_tools-2.8.0rc1/tests/data/data/timeseries_export.xml +16 -0
  254. rtc_tools-2.8.0rc1/tests/data/data/timeseries_import.bin +0 -0
  255. rtc_tools-2.8.0rc1/tests/data/data/timeseries_import.xml +28 -0
  256. rtc_tools-2.8.0rc1/tests/data/data/timeseries_import_0.csv +22 -0
  257. rtc_tools-2.8.0rc1/tests/data/data/timeseries_import_1.csv +22 -0
  258. rtc_tools-2.8.0rc1/tests/data/data/timeseries_import_2.csv +22 -0
  259. rtc_tools-2.8.0rc1/tests/data/data/timeseries_import_ensemble.nc +0 -0
  260. rtc_tools-2.8.0rc1/tests/data/data/timeseries_import_ensemble.xml +51 -0
  261. rtc_tools-2.8.0rc1/tests/data/data/timeseries_import_ensemblesize1_noRealization.nc +0 -0
  262. rtc_tools-2.8.0rc1/tests/data/data/timeseries_import_ensemblesize1_withRealization.nc +0 -0
  263. rtc_tools-2.8.0rc1/tests/data/data/timeseries_import_neq.xml +24 -0
  264. rtc_tools-2.8.0rc1/tests/data/data_path.py +12 -0
  265. rtc_tools-2.8.0rc1/tests/data/test_csv.py +56 -0
  266. rtc_tools-2.8.0rc1/tests/data/test_data.py +195 -0
  267. rtc_tools-2.8.0rc1/tests/data/test_diag.py +23 -0
  268. rtc_tools-2.8.0rc1/tests/data/test_interpolate.py +125 -0
  269. rtc_tools-2.8.0rc1/tests/data/test_netcdf.py +718 -0
  270. rtc_tools-2.8.0rc1/tests/data/test_storage.py +156 -0
  271. rtc_tools-2.8.0rc1/tests/data_path.py +12 -0
  272. rtc_tools-2.8.0rc1/tests/examples/__init__.py +0 -0
  273. rtc_tools-2.8.0rc1/tests/examples/test_examples.py +69 -0
  274. rtc_tools-2.8.0rc1/tests/internal/__init__.py +0 -0
  275. rtc_tools-2.8.0rc1/tests/internal/test_alias_tools.py +137 -0
  276. rtc_tools-2.8.0rc1/tests/optimization/__init__.py +0 -0
  277. rtc_tools-2.8.0rc1/tests/optimization/data/.gitignore +3 -0
  278. rtc_tools-2.8.0rc1/tests/optimization/data/EmptyModel.mo +2 -0
  279. rtc_tools-2.8.0rc1/tests/optimization/data/Model.mo +46 -0
  280. rtc_tools-2.8.0rc1/tests/optimization/data/ModelAlgebraic.mo +8 -0
  281. rtc_tools-2.8.0rc1/tests/optimization/data/ModelDebugChecks.mo +6 -0
  282. rtc_tools-2.8.0rc1/tests/optimization/data/ModelDelay.mo +14 -0
  283. rtc_tools-2.8.0rc1/tests/optimization/data/ModelMixedInteger.mo +8 -0
  284. rtc_tools-2.8.0rc1/tests/optimization/data/ModelSIUnits.mo +6 -0
  285. rtc_tools-2.8.0rc1/tests/optimization/data/ModelSymbolicParameters.mo +18 -0
  286. rtc_tools-2.8.0rc1/tests/optimization/data/ModelWithInitial.mo +50 -0
  287. rtc_tools-2.8.0rc1/tests/optimization/data/ModelWithInitialLinear.mo +38 -0
  288. rtc_tools-2.8.0rc1/tests/optimization/data/ModelWithLookupTable.mo +4 -0
  289. rtc_tools-2.8.0rc1/tests/optimization/data/SingleShootingModel.mo +17 -0
  290. rtc_tools-2.8.0rc1/tests/optimization/data/ensemble.csv +3 -0
  291. rtc_tools-2.8.0rc1/tests/optimization/data/initial_state.csv +2 -0
  292. rtc_tools-2.8.0rc1/tests/optimization/data/lookup_tables/.gitignore +3 -0
  293. rtc_tools-2.8.0rc1/tests/optimization/data/lookup_tables/curvefit_options.ini +5 -0
  294. rtc_tools-2.8.0rc1/tests/optimization/data/lookup_tables/x_prime.csv +6 -0
  295. rtc_tools-2.8.0rc1/tests/optimization/data/member0/.gitignore +2 -0
  296. rtc_tools-2.8.0rc1/tests/optimization/data/member0/initial_state.csv +2 -0
  297. rtc_tools-2.8.0rc1/tests/optimization/data/member0/parameters.csv +2 -0
  298. rtc_tools-2.8.0rc1/tests/optimization/data/member0/timeseries_import.csv +23 -0
  299. rtc_tools-2.8.0rc1/tests/optimization/data/member1/.gitignore +2 -0
  300. rtc_tools-2.8.0rc1/tests/optimization/data/member1/initial_state.csv +2 -0
  301. rtc_tools-2.8.0rc1/tests/optimization/data/member1/parameters.csv +2 -0
  302. rtc_tools-2.8.0rc1/tests/optimization/data/member1/timeseries_import.csv +23 -0
  303. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/.gitignore +1 -0
  304. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/Model.mo +9 -0
  305. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_ensemble_sizes/ensemble.csv +5 -0
  306. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_ensemble_sizes/member0/timeseries_import.csv +6 -0
  307. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_ensemble_sizes/member1/timeseries_import.csv +6 -0
  308. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_ensemble_sizes/member2/timeseries_import.csv +6 -0
  309. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_ensemble_sizes/member3/timeseries_import.csv +6 -0
  310. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_ensemble_sizes/rtcDataConfig.xml +15 -0
  311. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_ensemble_sizes/rtcParameterConfig.xml +7 -0
  312. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_ensemble_sizes/timeseries_import.nc +0 -0
  313. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_ensemble_sizes/timeseries_import.xml +23 -0
  314. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_initial_date/ensemble.csv +3 -0
  315. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_initial_date/member0/timeseries_import.csv +6 -0
  316. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_initial_date/member1/timeseries_import.csv +6 -0
  317. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_initial_date/rtcDataConfig.xml +15 -0
  318. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_initial_date/rtcParameterConfig.xml +7 -0
  319. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_initial_date/timeseries_import.nc +0 -0
  320. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_initial_date/timeseries_import.xml +43 -0
  321. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_timestep/ensemble.csv +3 -0
  322. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_timestep/member0/timeseries_import.csv +6 -0
  323. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_timestep/member1/timeseries_import.csv +6 -0
  324. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_timestep/rtcDataConfig.xml +15 -0
  325. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_timestep/rtcParameterConfig.xml +7 -0
  326. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_timestep/timeseries_import.nc +0 -0
  327. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_timestep/timeseries_import.xml +43 -0
  328. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_values/ensemble.csv +3 -0
  329. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_values/member0/parameters.csv +2 -0
  330. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_values/member0/timeseries_import.csv +6 -0
  331. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_values/member1/parameters.csv +2 -0
  332. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_values/member1/timeseries_import.csv +6 -0
  333. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_values/rtcDataConfig.xml +15 -0
  334. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_values/rtcParameterConfig.xml +7 -0
  335. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_values/timeseries_import.nc +0 -0
  336. rtc_tools-2.8.0rc1/tests/optimization/data/multiple_io_mixins/different_values/timeseries_import.xml +43 -0
  337. rtc_tools-2.8.0rc1/tests/optimization/data/non_zero_indexed_ensembles/Model.mo +46 -0
  338. rtc_tools-2.8.0rc1/tests/optimization/data/non_zero_indexed_ensembles/rtcDataConfig.xml +59 -0
  339. rtc_tools-2.8.0rc1/tests/optimization/data/non_zero_indexed_ensembles/rtcParameterConfig.xml +19 -0
  340. rtc_tools-2.8.0rc1/tests/optimization/data/non_zero_indexed_ensembles/rtcParameterConfig_extra.xml +22 -0
  341. rtc_tools-2.8.0rc1/tests/optimization/data/non_zero_indexed_ensembles/timeseries_import.xml +373 -0
  342. rtc_tools-2.8.0rc1/tests/optimization/data/one-member-ensemble/ensemble.csv +2 -0
  343. rtc_tools-2.8.0rc1/tests/optimization/data/one-member-ensemble/member0/.gitignore +2 -0
  344. rtc_tools-2.8.0rc1/tests/optimization/data/one-member-ensemble/member0/initial_state.csv +2 -0
  345. rtc_tools-2.8.0rc1/tests/optimization/data/one-member-ensemble/member0/parameters.csv +2 -0
  346. rtc_tools-2.8.0rc1/tests/optimization/data/one-member-ensemble/member0/timeseries_import.csv +23 -0
  347. rtc_tools-2.8.0rc1/tests/optimization/data/parameters.csv +2 -0
  348. rtc_tools-2.8.0rc1/tests/optimization/data/reference_linear_model.lp +117 -0
  349. rtc_tools-2.8.0rc1/tests/optimization/data/rtcDataConfig.xml +59 -0
  350. rtc_tools-2.8.0rc1/tests/optimization/data/rtcParameterConfig.xml +19 -0
  351. rtc_tools-2.8.0rc1/tests/optimization/data/rtcParameterConfig_extra.xml +22 -0
  352. rtc_tools-2.8.0rc1/tests/optimization/data/single_non_zero_ensemble_index/Model.mo +46 -0
  353. rtc_tools-2.8.0rc1/tests/optimization/data/single_non_zero_ensemble_index/rtcDataConfig.xml +59 -0
  354. rtc_tools-2.8.0rc1/tests/optimization/data/single_non_zero_ensemble_index/rtcParameterConfig.xml +19 -0
  355. rtc_tools-2.8.0rc1/tests/optimization/data/single_non_zero_ensemble_index/rtcParameterConfig_extra.xml +22 -0
  356. rtc_tools-2.8.0rc1/tests/optimization/data/single_non_zero_ensemble_index/timeseries_import.xml +188 -0
  357. rtc_tools-2.8.0rc1/tests/optimization/data/timeseries_import.csv +23 -0
  358. rtc_tools-2.8.0rc1/tests/optimization/data/timeseries_import.nc +0 -0
  359. rtc_tools-2.8.0rc1/tests/optimization/data/timeseries_import.xml +178 -0
  360. rtc_tools-2.8.0rc1/tests/optimization/data_path.py +12 -0
  361. rtc_tools-2.8.0rc1/tests/optimization/regenerate_lp_reference.py +38 -0
  362. rtc_tools-2.8.0rc1/tests/optimization/test_control_tree_mixin.py +259 -0
  363. rtc_tools-2.8.0rc1/tests/optimization/test_csv_lookuptable_mixin.py +94 -0
  364. rtc_tools-2.8.0rc1/tests/optimization/test_csv_mixin.py +127 -0
  365. rtc_tools-2.8.0rc1/tests/optimization/test_debug_checks.py +219 -0
  366. rtc_tools-2.8.0rc1/tests/optimization/test_delay_expressions.py +124 -0
  367. rtc_tools-2.8.0rc1/tests/optimization/test_export_lp.py +745 -0
  368. rtc_tools-2.8.0rc1/tests/optimization/test_extra_casadipath.py +82 -0
  369. rtc_tools-2.8.0rc1/tests/optimization/test_goal_programming.py +1177 -0
  370. rtc_tools-2.8.0rc1/tests/optimization/test_integration.py +457 -0
  371. rtc_tools-2.8.0rc1/tests/optimization/test_interpolation.py +444 -0
  372. rtc_tools-2.8.0rc1/tests/optimization/test_io_mixin.py +323 -0
  373. rtc_tools-2.8.0rc1/tests/optimization/test_linearized_order_goal_programming_mixin.py +160 -0
  374. rtc_tools-2.8.0rc1/tests/optimization/test_min_abs_goal_programming.py +158 -0
  375. rtc_tools-2.8.0rc1/tests/optimization/test_modelica_mixin.py +788 -0
  376. rtc_tools-2.8.0rc1/tests/optimization/test_multiple_io_mixins.py +179 -0
  377. rtc_tools-2.8.0rc1/tests/optimization/test_netcdf_mixin.py +219 -0
  378. rtc_tools-2.8.0rc1/tests/optimization/test_optimization_problem.py +87 -0
  379. rtc_tools-2.8.0rc1/tests/optimization/test_path_extra_variables.py +309 -0
  380. rtc_tools-2.8.0rc1/tests/optimization/test_path_variable_assembly.py +162 -0
  381. rtc_tools-2.8.0rc1/tests/optimization/test_pi_mixin.py +127 -0
  382. rtc_tools-2.8.0rc1/tests/optimization/test_planning_and_control_tree_mixin.py +106 -0
  383. rtc_tools-2.8.0rc1/tests/optimization/test_planning_mixin.py +94 -0
  384. rtc_tools-2.8.0rc1/tests/optimization/test_problem_class_check.py +32 -0
  385. rtc_tools-2.8.0rc1/tests/optimization/test_single_pass_goal_programming.py +269 -0
  386. rtc_tools-2.8.0rc1/tests/optimization/test_solvers.py +78 -0
  387. rtc_tools-2.8.0rc1/tests/optimization/test_timeseries.py +50 -0
  388. rtc_tools-2.8.0rc1/tests/optimization/test_vector_constraints_variables.py +809 -0
  389. rtc_tools-2.8.0rc1/tests/optimization/test_vector_goals.py +354 -0
  390. rtc_tools-2.8.0rc1/tests/simulation/__init__.py +0 -0
  391. rtc_tools-2.8.0rc1/tests/simulation/data/.gitignore +2 -0
  392. rtc_tools-2.8.0rc1/tests/simulation/data/Model.mo +45 -0
  393. rtc_tools-2.8.0rc1/tests/simulation/data/ModelCustomEquation.mo +7 -0
  394. rtc_tools-2.8.0rc1/tests/simulation/data/Model_base.mo +10 -0
  395. rtc_tools-2.8.0rc1/tests/simulation/data/Model_delay.mo +15 -0
  396. rtc_tools-2.8.0rc1/tests/simulation/data/Model_nominal.mo +4 -0
  397. rtc_tools-2.8.0rc1/tests/simulation/data/infeasible_initial_value/initial_state.csv +2 -0
  398. rtc_tools-2.8.0rc1/tests/simulation/data/infeasible_initial_value/model_infeasible.mo +7 -0
  399. rtc_tools-2.8.0rc1/tests/simulation/data/infeasible_initial_value/model_out_of_bounds.mo +5 -0
  400. rtc_tools-2.8.0rc1/tests/simulation/data/infeasible_initial_value/model_out_of_sym_bounds.mo +6 -0
  401. rtc_tools-2.8.0rc1/tests/simulation/data/infeasible_initial_value/model_with_bounds.mo +5 -0
  402. rtc_tools-2.8.0rc1/tests/simulation/data/infeasible_initial_value/model_with_input_series.mo +6 -0
  403. rtc_tools-2.8.0rc1/tests/simulation/data/infeasible_initial_value/model_with_sym_ystart.mo +6 -0
  404. rtc_tools-2.8.0rc1/tests/simulation/data/infeasible_initial_value/model_with_xstart.mo +5 -0
  405. rtc_tools-2.8.0rc1/tests/simulation/data/infeasible_initial_value/model_with_zero_xstart.mo +5 -0
  406. rtc_tools-2.8.0rc1/tests/simulation/data/infeasible_initial_value/timeseries_import.csv +3 -0
  407. rtc_tools-2.8.0rc1/tests/simulation/data/infeasible_initial_value/timeseries_import_with_x.csv +3 -0
  408. rtc_tools-2.8.0rc1/tests/simulation/data/initial_state.csv +2 -0
  409. rtc_tools-2.8.0rc1/tests/simulation/data/parameters.csv +2 -0
  410. rtc_tools-2.8.0rc1/tests/simulation/data/rtcDataConfig.xml +39 -0
  411. rtc_tools-2.8.0rc1/tests/simulation/data/rtcParameterConfig.xml +19 -0
  412. rtc_tools-2.8.0rc1/tests/simulation/data/timeseries_import.csv +23 -0
  413. rtc_tools-2.8.0rc1/tests/simulation/data/timeseries_import.xml +143 -0
  414. rtc_tools-2.8.0rc1/tests/simulation/data_path.py +12 -0
  415. rtc_tools-2.8.0rc1/tests/simulation/test_csv_mixin.py +102 -0
  416. rtc_tools-2.8.0rc1/tests/simulation/test_io_mixin.py +121 -0
  417. rtc_tools-2.8.0rc1/tests/simulation/test_pi_mixin.py +31 -0
  418. rtc_tools-2.8.0rc1/tests/simulation/test_problem_class_check.py +32 -0
  419. rtc_tools-2.8.0rc1/tests/simulation/test_simulation.py +570 -0
  420. rtc_tools-2.8.0rc1/tests/test_rtctoolsapp.py +125 -0
  421. rtc_tools-2.8.0rc1/tox.ini +26 -0
  422. rtc_tools-2.8.0rc1/uv.lock +2077 -0
  423. rtc_tools-2.8.0rc1/xsd/rtcDataConfig.xsd +115 -0
  424. rtc_tools-2.8.0rc1/xsd/rtcSharedTypes.xsd +116 -0
  425. rtc_tools-2.8.0.dev0/MANIFEST.in +0 -3
  426. rtc_tools-2.8.0.dev0/PKG-INFO +0 -53
  427. rtc_tools-2.8.0.dev0/README.md +0 -76
  428. rtc_tools-2.8.0.dev0/pyproject.toml +0 -23
  429. rtc_tools-2.8.0.dev0/setup.cfg +0 -18
  430. rtc_tools-2.8.0.dev0/setup.py +0 -71
  431. rtc_tools-2.8.0.dev0/src/rtc_tools.egg-info/PKG-INFO +0 -53
  432. rtc_tools-2.8.0.dev0/src/rtc_tools.egg-info/SOURCES.txt +0 -59
  433. rtc_tools-2.8.0.dev0/src/rtc_tools.egg-info/dependency_links.txt +0 -1
  434. rtc_tools-2.8.0.dev0/src/rtc_tools.egg-info/entry_points.txt +0 -3
  435. rtc_tools-2.8.0.dev0/src/rtc_tools.egg-info/requires.txt +0 -15
  436. rtc_tools-2.8.0.dev0/src/rtc_tools.egg-info/top_level.txt +0 -1
  437. rtc_tools-2.8.0.dev0/src/rtctools/__init__.py +0 -5
  438. rtc_tools-2.8.0.dev0/src/rtctools/_version.py +0 -21
  439. rtc_tools-2.8.0.dev0/src/rtctools/data/interpolation/__init__.py +0 -3
  440. rtc_tools-2.8.0.dev0/src/rtctools/rtctoolsapp.py +0 -131
  441. rtc_tools-2.8.0.dev0/versioneer.py +0 -2277
  442. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/COPYING.LESSER +0 -0
  443. /rtc_tools-2.8.0.dev0/src/rtctools/_internal/__init__.py → /rtc_tools-2.8.0rc1/examples/basic/output/.gitignore +0 -0
  444. /rtc_tools-2.8.0.dev0/src/rtctools/optimization/__init__.py → /rtc_tools-2.8.0rc1/examples/cascading_channels/output/.gitignore +0 -0
  445. /rtc_tools-2.8.0.dev0/src/rtctools/simulation/__init__.py → /rtc_tools-2.8.0rc1/examples/channel_pulse/output/.gitignore +0 -0
  446. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/_internal/ensemble_bounds_decorator.py +0 -0
  447. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/data/__init__.py +0 -0
  448. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/data/interpolation/bspline.py +0 -0
  449. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/data/interpolation/bspline2d.py +0 -0
  450. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/src/rtctools/optimization/planning_mixin.py +0 -0
  451. {rtc_tools-2.8.0.dev0 → rtc_tools-2.8.0rc1}/tests/test_case.py +0 -0
@@ -0,0 +1,12 @@
1
+ codecov:
2
+ branch: master
3
+ coverage:
4
+ status:
5
+ project:
6
+ default:
7
+ threshold: 5
8
+ patch:
9
+ default:
10
+ target: 0%
11
+ comment:
12
+ layout: "header, tree"
@@ -0,0 +1,15 @@
1
+ [run]
2
+ branch = True
3
+ source = rtctools
4
+ relative_files = True
5
+
6
+ [report]
7
+ show_missing = true
8
+ exclude_lines =
9
+ pragma: no cover
10
+ raise NotImplementedError
11
+
12
+ [paths]
13
+ source =
14
+ src/rtctools
15
+ */site-packages/rtctools
@@ -0,0 +1,35 @@
1
+ # This file contains revisions to be ignored by git blame.
2
+ # These revisions are expected to be formatting-only changes.
3
+ #
4
+ # Calling `git blame --ignore-revs-file .git-blame-ignore-revs` will
5
+ # tell git blame to ignore changes made by these revisions when assigning
6
+ # assigning blame, as if the change never happened.
7
+ #
8
+ # You can enable this as a default for your local repository by running
9
+ # `git config blame.ignoreRevsFile .git-blame-ignore-revs`
10
+ # This will probably be automatically picked by your IDE
11
+ #
12
+ # Important: if you are switching to the branch without this file,
13
+ # `git blame` will fail with an error
14
+ #
15
+ # Guidelines:
16
+ # - Only large automated refactorings are expected to be included in this file.
17
+ # Do not add new revision just because it feels unimportant
18
+ # - Add a link to the relevant issue/MR
19
+
20
+ # START https://github.com/rtc-tools/rtc-tools/issues/1536
21
+ 2503c49901bc4a7a3dc86d46b234e8973ed2feb5
22
+ 476aeb27d164cebe3781de7f9a40b04b839a5220
23
+ cf540b1ad8fc39909e6e05e7656901e26daefb62
24
+ c623c053a97506b120ab546aa406b4706f2cf200
25
+ cef7507e09c0f187ad209e949575a04b7204cbe9
26
+ 30868b64e85c56d971cbccb622466a1fe46bcd82
27
+ 8929d6eac903af87ef982566cb07f45369eedda1
28
+ ee870e42deda8974e482e96995c5c136a8cfe07c
29
+ 7908178e50ababa32534d205d62d525049b60dc3
30
+ # END https://github.com/rtc-tools/rtc-tools/issues/1536
31
+
32
+ # START https://github.com/rtc-tools/rtc-tools/pull/1652
33
+ 3df9a9ed5dfcbb6855ee8f4a0d22c4dec9f77507
34
+ c4e20c6c8debaa886eba596c468ee5a438bf73dd
35
+ # END https://github.com/rtc-tools/rtc-tools/pull/1652
@@ -0,0 +1,55 @@
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@3259c6206f993105e3a61b142c2d97bf4b9ef83d # v7.1.0
23
+ with:
24
+ version: ${{ inputs.uv-version }}
25
+ enable-cache: true
26
+ cache-dependency-glob: "uv.lock"
27
+ github-token: ${{ github.token }} # Avoid API rate limits
28
+
29
+ - name: Install dependencies
30
+ shell: bash
31
+ run: |
32
+ CMD_PARTS=("uv" "sync")
33
+
34
+ if [[ "${{ inputs.resolution-mode }}" == "lowest" ]]; then
35
+ CMD_PARTS+=("--resolution" "lowest-direct")
36
+ echo "UV_RESOLUTION=lowest-direct" >> $GITHUB_ENV
37
+ elif [[ "${{ inputs.resolution-mode }}" == "highest" ]]; then
38
+ CMD_PARTS+=("--upgrade")
39
+ echo "UV_RESOLUTION=highest" >> $GITHUB_ENV
40
+ else # Default to "frozen"
41
+ CMD_PARTS+=("--frozen")
42
+ fi
43
+
44
+ # Always exclude the default 'dev' group unless specific groups are requested that might include dev ones by intent.
45
+ # uv sync --no-dev is the default to exclude [tool.uv.dev-dependencies] or [dependency-groups.dev]
46
+ CMD_PARTS+=("--no-dev")
47
+
48
+ if [[ -n "${{ inputs.dependency-groups }}" ]]; then
49
+ for group in ${{ inputs.dependency-groups }}; do
50
+ CMD_PARTS+=("--group" "$group")
51
+ done
52
+ fi
53
+
54
+ echo "Executing: ${CMD_PARTS[*]}"
55
+ "${CMD_PARTS[@]}"
@@ -0,0 +1,153 @@
1
+ name: Tests & Release
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+ workflow_dispatch:
7
+ concurrency:
8
+ group: "${{ github.ref }}"
9
+ cancel-in-progress: true
10
+ # env:
11
+ # PYPI_USER: "${{ secrets.PYPI_USER }}"
12
+ # PYPI_PASSWORD: "${{ secrets.PYPI_PASSWORD }}"
13
+ # CODECOV_TOKEN: "${{ secrets.CODECOV_TOKEN}}"
14
+
15
+ permissions:
16
+ contents: read
17
+
18
+ jobs:
19
+ style:
20
+ runs-on: ubuntu-latest
21
+ timeout-minutes: 30
22
+ steps:
23
+ - uses: actions/checkout@v4
24
+ - uses: ./.github/actions/setup-python
25
+ with:
26
+ dependency-groups: "style"
27
+ - run: uv run pre-commit run --all-files --show-diff-on-failure
28
+
29
+ build:
30
+ needs: [style]
31
+ runs-on: ubuntu-latest
32
+ container:
33
+ image: python:3.10
34
+ timeout-minutes: 30
35
+ steps:
36
+ - uses: actions/checkout@v4.1.0
37
+ with:
38
+ fetch-depth: 0
39
+ - uses: ./.github/actions/setup-python
40
+ - run: uv build
41
+ - uses: actions/upload-artifact@v4
42
+ if: success()
43
+ with:
44
+ name: "${{ github.job }}"
45
+ retention-days: 7
46
+ path: dist/
47
+
48
+ test-linux:
49
+ name: Test Linux (Python ${{ matrix.version }}${{ matrix.label }})
50
+ needs: build
51
+ runs-on: ubuntu-latest
52
+ container:
53
+ image: python:${{ matrix.version }}
54
+ timeout-minutes: 30
55
+ env:
56
+ TOXENV: py
57
+ strategy:
58
+ matrix:
59
+ include:
60
+ - version: '3.10'
61
+ - version: '3.11'
62
+ - version: '3.12'
63
+ - version: '3.13'
64
+ - version: '3.14'
65
+ # Lowest and highest resolution modes to test oldest and newest dependencies.
66
+ - version: '3.10'
67
+ resolution_mode: 'lowest'
68
+ label: ' (Oldest Dependencies)'
69
+ - version: '3.14'
70
+ resolution_mode: 'highest'
71
+ label: ' (Newest Dependencies)'
72
+ steps:
73
+ - uses: actions/checkout@v4
74
+ - uses: ./.github/actions/setup-python
75
+ with:
76
+ dependency-groups: "tests"
77
+ resolution-mode: ${{ matrix.resolution_mode }}
78
+ - run: uv run tox -vv
79
+
80
+ coverage:
81
+ needs: build
82
+ runs-on: ubuntu-latest
83
+ container:
84
+ image: python:3.10
85
+ timeout-minutes: 30
86
+ env:
87
+ TOXENV: coverage
88
+ steps:
89
+ - uses: actions/checkout@v4.1.0
90
+ with:
91
+ # Full history required for accurate Sonar SCM blame data
92
+ fetch-depth: 0
93
+ - uses: ./.github/actions/setup-python
94
+ with:
95
+ dependency-groups: "tests"
96
+ - run: uv run tox -vv
97
+ - name: Upload coverage report
98
+ uses: actions/upload-artifact@v4
99
+ if: success()
100
+ with:
101
+ name: coverage-report
102
+ retention-days: 7
103
+ path: coverage.xml
104
+ - name: SonarQube Cloud Scan
105
+ if: ${{ success() && (github.event_name == 'push' || github.event_name == 'pull_request') }}
106
+ continue-on-error: true
107
+ uses: SonarSource/sonarqube-scan-action@59db25f34e16620e48ab4bb9e4a5dce155cb5432 # v8.0.0
108
+ env:
109
+ SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
110
+
111
+ examples-linux:
112
+ needs: build
113
+ runs-on: ubuntu-latest
114
+ container:
115
+ image: python:${{ matrix.version }}
116
+ if: github.event_name == 'pull_request' || startsWith(github.ref, 'refs/tags')
117
+ timeout-minutes: 30
118
+ env:
119
+ TOXENV: examples
120
+ strategy:
121
+ matrix:
122
+ version:
123
+ - '3.10'
124
+ - '3.11'
125
+ - '3.12'
126
+ - '3.13'
127
+ - '3.14'
128
+ steps:
129
+ - uses: actions/checkout@v4.1.0
130
+ - uses: ./.github/actions/setup-python
131
+ with:
132
+ dependency-groups: "tests"
133
+ - run: uv run tox -vv
134
+
135
+ deploy:
136
+ needs: [test-linux, coverage, examples-linux]
137
+ runs-on: ubuntu-latest
138
+ if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/2.') }}
139
+ permissions:
140
+ id-token: write # Required for OIDC PyPI publishing
141
+ contents: read
142
+ steps:
143
+ - name: Check out code
144
+ uses: actions/checkout@v4
145
+
146
+ - name: Set up Python and uv
147
+ uses: ./.github/actions/setup-python
148
+
149
+ - name: Build package
150
+ run: uv build
151
+
152
+ - name: Publish package distributions to PyPI
153
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,33 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__
3
+ *.py[cod]
4
+
5
+ # C extensions
6
+ *.c
7
+ *.so
8
+
9
+ # Distribution & Packaging
10
+ .eggs
11
+ build
12
+ dist
13
+ src/*.egg-info
14
+
15
+ # Testing & Coverage
16
+ .pytest_cache
17
+ .tox
18
+ .coverage
19
+
20
+ # Example output
21
+ examples/**/output/**/*.csv
22
+
23
+ # Model caches
24
+ *.pymoca_cache
25
+
26
+ # Editors
27
+ .idea
28
+ .ipynb_checkpoints
29
+ .vscode
30
+
31
+ # Virtual environment
32
+ .venv
33
+ venv
@@ -0,0 +1,7 @@
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ rev: v0.14.6
4
+ hooks:
5
+ - id: ruff
6
+ args: [--fix, --exit-non-zero-on-fix]
7
+ - id: ruff-format
@@ -0,0 +1,26 @@
1
+ # .readthedocs.yaml
2
+ # Read the Docs configuration file
3
+ # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
4
+
5
+ # Required
6
+ version: 2
7
+
8
+ # Set the version of Python and other tools you might need
9
+ build:
10
+ os: ubuntu-22.04
11
+ tools:
12
+ python: "3.11"
13
+ jobs:
14
+ pre_create_environment:
15
+ - asdf plugin add uv
16
+ - asdf install uv latest
17
+ - asdf global uv latest
18
+ create_environment:
19
+ - uv venv "${READTHEDOCS_VIRTUALENV_PATH}"
20
+ install:
21
+ - UV_PROJECT_ENVIRONMENT="${READTHEDOCS_VIRTUALENV_PATH}" uv sync --frozen --group docs
22
+
23
+
24
+ # Build documentation in the docs/ directory with Sphinx
25
+ sphinx:
26
+ configuration: doc/conf.py
@@ -0,0 +1,13 @@
1
+ Farid Alavi
2
+ Jorn Baayen
3
+ Joris Bentvelsen
4
+ Olav van Duin
5
+ Sjoerd Geevers
6
+ Joris Gillis
7
+ Klaudia Horváth
8
+ Ailbhe Mitchell
9
+ Teresa Piovesan
10
+ Jesús A. Rodríguez
11
+ Matthijs den Toom
12
+ Jesse VanderWees
13
+ Tjerk Vreeken
@@ -0,0 +1,127 @@
1
+ # Technical Charter (the "Charter")
2
+
3
+ for
4
+
5
+ RTC-Tools a Series of LF Projects, LLC
6
+
7
+ The full charter is available at: [RTC-Tools Technical Charter (PDF)](https://lfx-cdn-prod.s3.us-east-1.amazonaws.com/project-artifacts/rtc-tools/rtc-tools_Charter.pdf)
8
+
9
+ Adopted 7-22-2025
10
+
11
+ ---
12
+
13
+ This Charter sets forth the responsibilities and procedures for technical contribution to, and oversight of, the RTC-Tools open source project, which has been established as RTC-Tools a Series of LF Projects, LLC (the “Project”). LF Projects, LLC (“LF Projects”) is a Delaware series limited liability company. All contributors (including committers, maintainers, and other technical positions) and other participants in the Project (collectively, “Collaborators”) must comply with the terms of this Charter.
14
+
15
+ ---
16
+
17
+ ## 1. Mission and Scope of the Project
18
+
19
+ a. The mission of the Project is to provide a robust, flexible, and scalable framework that empowers organizations to efficiently manage and optimize their assets, contributing to sustainable water and energy solutions worldwide.
20
+
21
+ b. The scope of the Project includes collaborative development under the Project License (as defined herein) supporting the mission, including documentation, testing, integration and the creation of other artifacts that aid the development, deployment, operation or adoption of the open source project.
22
+
23
+ ---
24
+
25
+ ## 2. Technical Steering Committee
26
+
27
+ a. The Technical Steering Committee (the “TSC”) will be responsible for all technical oversight of the open source Project.
28
+
29
+ b. The TSC voting members are initially the Project’s Committers. At the inception of the project, the Committers of the Project will be as set forth within the “CONTRIBUTING” file within the Project’s code repository. The TSC may choose an alternative approach for determining the voting members of the TSC, and any such alternative approach will be documented in the CONTRIBUTING file. Any meetings of the Technical Steering Committee are intended to be open to the public, and can be conducted electronically, via teleconference, or in person.
30
+
31
+ c. TSC projects generally will involve Contributors and Committers. The TSC may adopt or modify roles so long as the roles are documented in the CONTRIBUTING file. Unless otherwise documented:
32
+
33
+ i. Contributors include anyone in the technical community that contributes code, documentation, or other technical artifacts to the Project;
34
+
35
+ ii. Committers are Contributors who have earned the ability to modify (“commit”) source code, documentation or other technical artifacts in a project’s repository; and
36
+
37
+ iii. A Contributor may become a Committer by a majority approval of the existing Committers. A Committer may be removed by a majority approval of the other existing Committers.
38
+
39
+ d. Participation in the Project through becoming a Contributor and Committer is open to anyone so long as they abide by the terms of this Charter.
40
+
41
+ e. The TSC may (1) establish work flow procedures for the submission, approval, and closure/archiving of projects, (2) set requirements for the promotion of Contributors to Committer status, as applicable, and (3) amend, adjust, refine and/or eliminate the roles of Contributors, and Committers, and create new roles, and publicly document any TSC roles, as it sees fit.
42
+
43
+ f. The TSC may elect a TSC Chair, who will preside over meetings of the TSC and will serve until their resignation or replacement by the TSC. The TSC Chair, or any other TSC member so designated by the TSC, will serve as the primary communication contact between the Project and LF Energy, a directed fund of The Linux Foundation. The Project has been initialized at Deltares. To acknowledge this, the TSC Chair is offered to Deltares first. If Deltares does not provide a candidate, other TSC members can be elected.
44
+
45
+ g. Responsibilities: The TSC will be responsible for all aspects of oversight relating to the Project, which may include:
46
+
47
+ i. coordinating the technical direction of the Project;
48
+ ii. approving project or system proposals (including, but not limited to, incubation, deprecation, and changes to a sub-project’s scope);
49
+ iii. organizing sub-projects and removing sub-projects;
50
+ iv. creating sub-committees or working groups to focus on cross-project technical issues and requirements;
51
+ v. appointing representatives to work with other open source or open standards communities;
52
+ vi. establishing community norms, workflows, issuing releases, and security issue reporting policies;
53
+ vii. approving and implementing policies and processes for contributing (to be published in the CONTRIBUTING file) and coordinating with the series manager of the Project (as provided for in the Series Agreement, the “Series Manager”) to resolve matters or concerns that may arise as set forth in Section 7 of this Charter;
54
+ viii. discussions, seeking consensus, and where necessary, voting on technical matters relating to the code base that affect multiple projects; and
55
+ ix. coordinating any marketing, events, or communications regarding the Project.
56
+
57
+ ---
58
+
59
+ ## 3. TSC Voting
60
+
61
+ a. While the Project aims to operate as a consensus-based community, if any TSC decision requires a vote to move the Project forward, the voting members of the TSC will vote on a one vote per voting member basis.
62
+
63
+ b. Quorum for TSC meetings requires at least fifty percent of all voting members of the TSC to be present. The TSC may continue to meet if quorum is not met but will be prevented from making any decisions at the meeting.
64
+
65
+ c. Except as provided in Section 7.c. and 8.a, decisions by vote at a meeting require a majority vote of those in attendance, provided quorum is met. Decisions made by electronic vote without a meeting require a majority vote of all voting members of the TSC.
66
+
67
+ d. In the event a vote cannot be resolved by the TSC, any voting member of the TSC may refer the matter to the Series Manager for assistance in reaching a resolution.
68
+
69
+ ---
70
+
71
+ ## 4. Compliance with Policies
72
+
73
+ a. This Charter is subject to the Series Agreement for the Project and the Operating Agreement of LF Projects. Contributors will comply with the policies of LF Projects as may be adopted and amended by LF Projects, including, without limitation the policies listed at https://lfprojects.org/policies/.
74
+
75
+ b. The TSC may adopt a code of conduct (“CoC”) for the Project, which is subject to approval by the Series Manager. In the event that a Project-specific CoC has not been approved, the LF Projects Code of Conduct listed at https://lfprojects.org/policies will apply for all Collaborators in the Project.
76
+
77
+ c. When amending or adopting any policy applicable to the Project, LF Projects will publish such policy, as to be amended or adopted, on its web site at least 30 days prior to such policy taking effect; provided, however, that in the case of any amendment of the Trademark Policy or Terms of Use of LF Projects, any such amendment is effective upon publication on LF Project’s web site.
78
+
79
+ d. All Collaborators must allow open participation from any individual or organization meeting the requirements for contributing under this Charter and any policies adopted for all Collaborators by the TSC, regardless of competitive interests. Put another way, the Project community must not seek to exclude any participant based on any criteria, requirement, or reason other than those that are reasonable and applied on a non-discriminatory basis to all Collaborators in the Project community.
80
+
81
+ e. The Project will operate in a transparent, open, collaborative, and ethical manner at all times. The output of all Project discussions, proposals, timelines, decisions, and status should be made open and easily visible to all. Any potential violations of this requirement should be reported immediately to the Series Manager.
82
+
83
+ ---
84
+
85
+ ## 5. Community Assets
86
+
87
+ a. LF Projects will hold title to all trade or service marks used by the Project (“Project Trademarks”), whether based on common law or registered rights. Project Trademarks will be transferred and assigned to LF Projects to hold on behalf of the Project. Any use of any Project Trademarks by Collaborators in the Project will be in accordance with the license from LF Projects and inure to the benefit of LF Projects.
88
+
89
+ b. The Project will, as permitted and in accordance with such license from LF Projects, develop and own all Project GitHub and social media accounts, and domain name registrations created by the Project community.
90
+
91
+ c. Under no circumstances will LF Projects be expected or required to undertake any action on behalf of the Project that is inconsistent with the tax-exempt status or purpose, as applicable, of the Joint Development Foundation or LF Projects, LLC.
92
+
93
+ ---
94
+
95
+ ## 6. General Rules and Operations
96
+
97
+ a. The Project will:
98
+
99
+ i. engage in the work of the Project in a professional manner consistent with maintaining a cohesive community, while also maintaining the goodwill and esteem of LF Projects, Joint Development Foundation and other partner organizations in the open source community; and
100
+ ii. respect the rights of all trademark owners, including any branding and trademark usage guidelines.
101
+
102
+
103
+ ## 7. Intellectual Property Policy
104
+
105
+ a. Collaborators acknowledge that the copyright in all new contributions will be retained by the copyright holder as independent works of authorship and that no contributor or copyright holder will be required to assign copyrights to the Project.
106
+
107
+ b. Except as described in Section 7.c., all contributions to the Project are subject to the following:
108
+
109
+ i. All new inbound code contributions to the Project must be made using GNU Lesser General Public License v3.0GNU Library General Public License, Version 3.0, available at https://github.com/Deltares/rtc-tools/blob/master/COPYING (the “Project License”).
110
+
111
+ ii. All new inbound code contributions must also be accompanied by a Developer Certificate of Origin (http://developercertificate.org) sign-off in the source code system that is submitted through a TSC-approved contribution process which will bind the authorized contributor and, if not self-employed, their employer to the applicable license;
112
+
113
+ iii. All outbound code will be made available under the Project License.
114
+
115
+ iv. Documentation will be received and made available by the Project under the Creative Commons Attribution 4.0 International License (available at http://creativecommons.org/licenses/by/4.0/).
116
+
117
+ v. The Project may seek to integrate and contribute back to other open source projects (“Upstream Projects”). In such cases, the Project will conform to all license requirements of the Upstream Projects, including dependencies, leveraged by the Project. Upstream Project code contributions not stored within the Project’s main code repository will comply with the contribution process and license terms for the applicable Upstream Project.
118
+
119
+ c. The TSC may approve the use of an alternative license or licenses for inbound or outbound contributions on an exception basis. To request an exception, please describe the contribution, the alternative open source license(s), and the justification for using an alternative open source license for the Project. License exceptions must be approved by a two-thirds vote of the entire TSC.
120
+
121
+ d. Contributed files should contain license information, such as SPDX short form identifiers, indicating the open source license or licenses pertaining to the file.
122
+
123
+ ---
124
+
125
+ ## 8. Amendments
126
+
127
+ a. This charter may be amended by a two-thirds vote of the entire TSC and is subject to approval