oemof.solph 0.5.2.dev0__tar.gz → 0.5.2.dev2__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 (379) hide show
  1. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/.bumpversion.cfg +1 -1
  2. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/.readthedocs.yaml +3 -1
  3. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/MANIFEST.in +0 -1
  4. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/PKG-INFO +21 -6
  5. oemof.solph-0.5.2.dev2/VERSION +1 -0
  6. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/conf.py +1 -1
  7. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/index.rst +0 -1
  8. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/usage.rst +26 -21
  9. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-5-1.rst +2 -2
  10. oemof.solph-0.5.2.dev2/docs/whatsnew/v0-5-2.rst +52 -0
  11. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/pyproject.toml +1 -1
  12. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/setup.cfg +1 -1
  13. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/setup.py +1 -1
  14. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/__init__.py +1 -1
  15. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/_energy_system.py +66 -34
  16. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/_models.py +17 -9
  17. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/_options.py +21 -26
  18. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/_plumbing.py +2 -2
  19. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/buses/_bus.py +22 -5
  20. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/buses/experimental/_electrical_bus.py +20 -5
  21. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/_converter.py +7 -7
  22. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/_generic_chp.py +2 -2
  23. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/_generic_storage.py +246 -68
  24. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/_link.py +12 -9
  25. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/_offset_converter.py +2 -2
  26. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/_sink.py +2 -2
  27. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/_source.py +2 -2
  28. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/experimental/_generic_caes.py +27 -13
  29. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/experimental/_piecewise_linear_converter.py +22 -7
  30. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/experimental/_sink_dsm.py +491 -88
  31. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/constraints/equate_variables.py +7 -4
  32. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/constraints/integral_limit.py +5 -2
  33. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/constraints/investment_limit.py +7 -4
  34. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/constraints/shared_limit.py +5 -2
  35. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/flows/_flow.py +7 -5
  36. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/flows/_investment_flow_block.py +224 -39
  37. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/flows/_non_convex_flow_block.py +47 -27
  38. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/flows/_simple_flow_block.py +33 -20
  39. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/views.py +15 -12
  40. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof.solph.egg-info/PKG-INFO +21 -6
  41. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof.solph.egg-info/SOURCES.txt +10 -1
  42. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof.solph.egg-info/entry_points.txt +0 -1
  43. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/constraint_tests.py +71 -58
  44. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/connect_investment_multi_period.lp +147 -147
  45. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/converter_invest_multi_period.lp +51 -51
  46. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/converter_invest_with_existing_multi_period.lp +81 -81
  47. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_DIW_invest_multi_period.lp +4 -4
  48. oemof.solph-0.5.2.dev2/tests/lp_files/dsm_module_DIW_invest_multi_period_remaining_value.lp +487 -0
  49. oemof.solph-0.5.2.dev2/tests/lp_files/dsm_module_DLR_invest_multi_period.lp +824 -0
  50. oemof.solph-0.5.2.dev0/tests/lp_files/dsm_module_DLR_invest_multi_period.lp → oemof.solph-0.5.2.dev2/tests/lp_files/dsm_module_DLR_invest_multi_period_remaining_value.lp +6 -6
  51. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_oemof_extended.lp +1 -1
  52. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_oemof_invest_multi_period.lp +4 -4
  53. oemof.solph-0.5.2.dev2/tests/lp_files/dsm_module_oemof_invest_multi_period_remaining_value.lp +301 -0
  54. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/fixed_costs_sources.lp +1 -1
  55. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/fixed_source_invest_sink_multi_period.lp +3 -3
  56. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/flow_invest_with_offset_multi_period.lp +3 -3
  57. oemof.solph-0.5.2.dev2/tests/lp_files/flow_invest_with_offset_multi_period_remaining_value.lp +206 -0
  58. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/flow_invest_with_offset_no_minimum_multi_period.lp +3 -3
  59. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/flow_invest_without_offset_multi_period.lp +3 -3
  60. oemof.solph-0.5.2.dev2/tests/lp_files/flow_invest_without_offset_multi_period_remaining_value.lp +203 -0
  61. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/invest_source_fixed_sink_multi_period.lp +3 -3
  62. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/linear_converter_chp_invest_multi_period.lp +33 -33
  63. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/linear_converter_invest_multi_period.lp +27 -27
  64. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/linear_converter_invest_multi_period_old.lp +27 -27
  65. oemof.solph-0.5.2.dev2/tests/lp_files/linear_converter_invest_multi_period_remaining_value.lp +230 -0
  66. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/min_max_runtime.lp +6 -44
  67. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/min_max_runtime_multi_period.lp +23 -60
  68. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/multi_period_period_length.lp +337 -337
  69. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/periodical_investment_limit.lp +115 -115
  70. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/periodical_investment_limit_with_dsm_DIW.lp +12 -12
  71. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/periodical_investment_limit_with_dsm_DLR.lp +12 -12
  72. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/periodical_investment_limit_with_dsm_oemof.lp +12 -12
  73. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_1_fixed_losses.lp +1 -1
  74. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_1_multi_period.lp +3 -3
  75. oemof.solph-0.5.2.dev2/tests/lp_files/storage_invest_1_multi_period_remaining_value.lp +505 -0
  76. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_2_multi_period.lp +94 -94
  77. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_3_multi_period.lp +6 -6
  78. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_4_multi_period.lp +3 -3
  79. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_5_multi_period.lp +89 -89
  80. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_6_multi_period.lp +6 -6
  81. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_all_nonconvex_multi_period.lp +124 -124
  82. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_minimum_multi_period.lp +3 -3
  83. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_multi_period.lp +3 -3
  84. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_with_offset_multi_period.lp +88 -88
  85. oemof.solph-0.5.2.dev2/tests/lp_files/storage_invest_with_offset_multi_period_remaining_value.lp +529 -0
  86. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_without_offset_multi_period.lp +88 -88
  87. oemof.solph-0.5.2.dev2/tests/lp_files/storage_invest_without_offset_multi_period_remaining_value.lp +526 -0
  88. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/multi_period_constraint_tests.py +392 -60
  89. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/regression_tests.py +1 -1
  90. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_components.py +28 -10
  91. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_constraints_module.py +9 -4
  92. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_energy_system.py +18 -1
  93. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_grouping.py +1 -1
  94. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_models.py +20 -23
  95. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_non_equidistant_time_index.py +21 -18
  96. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_options.py +3 -1
  97. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_outputlib/__init__.py +1 -1
  98. oemof.solph-0.5.2.dev2/tests/test_plumbing.py +39 -0
  99. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_processing.py +22 -13
  100. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_connect_invest/test_connect_invest.py +20 -17
  101. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_flexible_modelling/test_add_constraints.py +4 -1
  102. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_generic_caes/test_generic_caes.py +3 -3
  103. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_generic_chp/test_generic_chp.py +3 -2
  104. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_invest_fix_flow/test_simple_invest_fixed.py +4 -2
  105. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_lopf/test_lopf.py +38 -34
  106. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_multi_period_model/test_multi_period_dispatch_model.py +8 -0
  107. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_multi_period_model/test_multi_period_investment_model.py +15 -7
  108. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_options/test_non_convex.py +0 -21
  109. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_piecewiselineartransformer/test_piecewiselineartransformer.py +3 -3
  110. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_simple_model/test_simple_dispatch.py +5 -2
  111. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_simple_model/test_simple_dispatch_one.py +4 -2
  112. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_simple_model/test_simple_dispatch_one_explicit_timemode.py +4 -2
  113. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_simple_model/test_simple_invest.py +7 -4
  114. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_storage_investment/test_invest_storage_regression.py +10 -3
  115. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_storage_investment/test_storage_investment.py +11 -4
  116. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_storage_investment/test_storage_with_tuple_label.py +12 -6
  117. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_variable_chp/test_variable_chp.py +11 -6
  118. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_solph_network_classes.py +17 -9
  119. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_time_index.py +12 -4
  120. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_warnings.py +6 -17
  121. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tox.ini +1 -1
  122. oemof.solph-0.5.2.dev0/VERSION +0 -1
  123. oemof.solph-0.5.2.dev0/docs/examples/electrical.lopf.rst +0 -7
  124. oemof.solph-0.5.2.dev0/docs/whatsnew/v0-5-2.rst +0 -27
  125. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/.coveragerc +0 -0
  126. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/.editorconfig +0 -0
  127. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/.pep8speaks.yml +0 -0
  128. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/.prospector.yml +0 -0
  129. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/AUTHORS.rst +0 -0
  130. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/CITATION.cff +0 -0
  131. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/CODE_OF_CONDUCT.md +0 -0
  132. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/CONTRIBUTING.rst +0 -0
  133. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/LICENSE +0 -0
  134. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/README.rst +0 -0
  135. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/ci/appveyor-with-compiler.cmd +0 -0
  136. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/ci/bootstrap.py +0 -0
  137. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/ci/requirements.txt +0 -0
  138. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/ci/templates/.appveyor.yml +0 -0
  139. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/ci/templates/.travis.yml +0 -0
  140. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/ci/templates/tox.ini +0 -0
  141. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/ExtractionTurbine_range_of_operation.svg +0 -0
  142. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/GenericCHP.svg +0 -0
  143. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/OffsetConverter_efficiency.svg +0 -0
  144. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/OffsetConverter_power_relation.svg +0 -0
  145. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/Plot_delay_2013-01-01.svg +0 -0
  146. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/diesel_genset_investment_flow.svg +0 -0
  147. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/diesel_genset_nonconvex_flow.svg +0 -0
  148. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/diesel_genset_nonconvex_invest_flow.svg +0 -0
  149. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/example_figures.png +0 -0
  150. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/example_network.svg +0 -0
  151. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/example_variable_chp.svg +0 -0
  152. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/framework_concept.svg +0 -0
  153. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/nonconvex_invest_investcosts_power.svg +0 -0
  154. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/nonconvex_invest_specific_costs.svg +0 -0
  155. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/oemof_solph_example.svg +0 -0
  156. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/pahesmf_init.py +0 -0
  157. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_files/variable_chp_plot.svg +0 -0
  158. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_logo/README.rst +0 -0
  159. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_logo/editable_fonts/logo_oemof_solph_COMPACT_editable_fonts.svg +0 -0
  160. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_logo/editable_fonts/logo_oemof_solph_FULL_editable_fonts.svg +0 -0
  161. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_logo/editable_fonts/logo_oemof_solph_ICON_editable_fonts.svg +0 -0
  162. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_logo/editable_fonts/logo_oemof_solph_NOTEXT_editable_fonts.svg +0 -0
  163. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_logo/logo_oemof_solph_COMPACT.svg +0 -0
  164. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_logo/logo_oemof_solph_COMPACT_bg.svg +0 -0
  165. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_logo/logo_oemof_solph_FULL.svg +0 -0
  166. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_logo/logo_oemof_solph_ICON.svg +0 -0
  167. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/_logo/logo_oemof_solph_NOTEXT.svg +0 -0
  168. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/authors.rst +0 -0
  169. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/changelog.rst +0 -0
  170. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/contributing.rst +0 -0
  171. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/docutils.conf +0 -0
  172. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/activity_costs.rst +0 -0
  173. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/basic_example.rst +0 -0
  174. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/cellular.rst +0 -0
  175. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/custom_constraints.rst +0 -0
  176. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/electrical.transshipment.rst +0 -0
  177. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/emission_constraint.rst +0 -0
  178. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/excel_reader.rst +0 -0
  179. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/flow_count_limit.rst +0 -0
  180. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/flow_gradient.rst +0 -0
  181. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/invest_nonconvex.rst +0 -0
  182. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/min_max_runtimes.rst +0 -0
  183. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/minimal_investment.rst +0 -0
  184. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/nametuple.rst +0 -0
  185. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/offset_converter.rst +0 -0
  186. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/shared_invest_limit.rst +0 -0
  187. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/simple_dispatch.rst +0 -0
  188. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/startup_costs.rst +0 -0
  189. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/storage_costs.rst +0 -0
  190. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/storage_investment.rst +0 -0
  191. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/storage_level_constraint.rst +0 -0
  192. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/time_index.rst +0 -0
  193. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/unbalanced_storage.rst +0 -0
  194. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/examples/variable_chp.rst +0 -0
  195. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/index.rst +0 -0
  196. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/readme.rst +0 -0
  197. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/index.rst +0 -0
  198. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.busses.rst +0 -0
  199. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.components.rst +0 -0
  200. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.console_scripts.rst +0 -0
  201. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.constraints.rst +0 -0
  202. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.energy_system.rst +0 -0
  203. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.flow.rst +0 -0
  204. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.groupings.rst +0 -0
  205. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.helpers.rst +0 -0
  206. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.models.rst +0 -0
  207. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.options.rst +0 -0
  208. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.plumbing.rst +0 -0
  209. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.processing.rst +0 -0
  210. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/reference/oemof.solph.views.rst +0 -0
  211. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/requirements.txt +0 -0
  212. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/spelling_wordlist.txt +0 -0
  213. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-0-1.rst +0 -0
  214. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-0-2.rst +0 -0
  215. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-0-3.rst +0 -0
  216. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-0-4.rst +0 -0
  217. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-0-5.rst +0 -0
  218. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-0-6.rst +0 -0
  219. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-0-7.rst +0 -0
  220. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-1-0.rst +0 -0
  221. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-1-1.rst +0 -0
  222. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-1-2.rst +0 -0
  223. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-1-4.rst +0 -0
  224. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-2-0.rst +0 -0
  225. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-2-1.rst +0 -0
  226. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-2-2.rst +0 -0
  227. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-2-3.rst +0 -0
  228. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-3-0.rst +0 -0
  229. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-3-1.rst +0 -0
  230. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-3-2.rst +0 -0
  231. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-4-0.rst +0 -0
  232. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-4-1.rst +0 -0
  233. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-4-2.rst +0 -0
  234. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-4-4.rst +0 -0
  235. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-4-5.rst +0 -0
  236. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/docs/whatsnew/v0-5-0.rst +0 -0
  237. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/examples/basic_example/basic_example.csv +0 -0
  238. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/examples/excel_reader/scenario.xlsx +0 -0
  239. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/examples/invest_nonconvex_flow_examples/solar_generation.csv +0 -0
  240. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/examples/offset_converter_example/diesel_genset_data.csv +0 -0
  241. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/examples/simple_dispatch/input_data.csv +0 -0
  242. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/examples/storage_investment/storage_investment.csv +0 -0
  243. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/examples/tuple_as_labels/tuple_as_label.csv +0 -0
  244. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/examples/variable_chp/variable_chp.csv +0 -0
  245. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/_console_scripts.py +0 -0
  246. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/_groupings.py +0 -0
  247. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/_helpers.py +0 -0
  248. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/buses/__init__.py +0 -0
  249. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/buses/experimental/__init__.py +0 -0
  250. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/__init__.py +0 -0
  251. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/_extraction_turbine_chp.py +0 -0
  252. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/components/experimental/__init__.py +0 -0
  253. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/constraints/__init__.py +0 -0
  254. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/constraints/equate_flows.py +0 -0
  255. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/constraints/flow_count_limit.py +0 -0
  256. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/constraints/storage_level.py +0 -0
  257. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/flows/__init__.py +0 -0
  258. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/flows/_invest_non_convex_flow_block.py +0 -0
  259. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/flows/experimental/__init__.py +0 -0
  260. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/flows/experimental/_electrical_line.py +0 -0
  261. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/helpers.py +0 -0
  262. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof/solph/processing.py +0 -0
  263. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof.solph.egg-info/dependency_links.txt +0 -0
  264. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof.solph.egg-info/not-zip-safe +0 -0
  265. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof.solph.egg-info/requires.txt +0 -0
  266. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/src/oemof.solph.egg-info/top_level.txt +0 -0
  267. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/flow_tests.py +0 -0
  268. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/activity_costs.lp +0 -0
  269. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/activity_costs_multi_period.lp +0 -0
  270. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/connect_investment.lp +0 -0
  271. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/converter.lp +0 -0
  272. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/converter_invest.lp +0 -0
  273. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/converter_invest_with_existing.lp +0 -0
  274. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/converter_multi_period.lp +0 -0
  275. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_DIW.lp +0 -0
  276. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_DIW_extended.lp +0 -0
  277. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_DIW_extended_multi_period.lp +0 -0
  278. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_DIW_invest.lp +0 -0
  279. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_DIW_multi_period.lp +0 -0
  280. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_DLR.lp +0 -0
  281. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_DLR_delay_time.lp +0 -0
  282. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_DLR_extended.lp +0 -0
  283. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_DLR_extended_multi_period.lp +0 -0
  284. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_DLR_invest.lp +0 -0
  285. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_DLR_multi_period.lp +0 -0
  286. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_oemof.lp +0 -0
  287. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_oemof_extended_multi_period.lp +0 -0
  288. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_oemof_invest.lp +0 -0
  289. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/dsm_module_oemof_multi_period.lp +0 -0
  290. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/emission_budget_limit.lp +0 -0
  291. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/emission_limit.lp +0 -0
  292. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/emission_limit_no_error.lp +0 -0
  293. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/equate_flows.lp +0 -0
  294. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/fixed_source_invest_sink.lp +0 -0
  295. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/fixed_source_variable_sink.lp +0 -0
  296. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/fixed_source_variable_sink_multi_period.lp +0 -0
  297. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/flow_count_limit.lp +0 -0
  298. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/flow_count_limit_multi_period.lp +0 -0
  299. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/flow_invest_with_offset.lp +0 -0
  300. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/flow_invest_with_offset_no_minimum.lp +0 -0
  301. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/flow_invest_without_offset.lp +0 -0
  302. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/flow_nonconvex_invest_bounded_converter.lp +0 -0
  303. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/flow_reaching_lifetime.lp +0 -0
  304. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/flow_reaching_lifetime_initial_age.lp +0 -0
  305. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/generic_invest_limit.lp +0 -0
  306. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/inactivity_costs.lp +0 -0
  307. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/inactivity_costs_multi_period.lp +0 -0
  308. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/integer_source.lp +0 -0
  309. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/invest_non_convex_flow.lp +0 -0
  310. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/invest_source_fixed_sink.lp +0 -0
  311. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/investment_limit.lp +0 -0
  312. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/investment_limit_with_dsm_DIW.lp +0 -0
  313. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/investment_limit_with_dsm_DLR.lp +0 -0
  314. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/investment_limit_with_dsm_oemof.lp +0 -0
  315. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/linear_converter.lp +0 -0
  316. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/linear_converter_chp.lp +0 -0
  317. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/linear_converter_chp_invest.lp +0 -0
  318. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/linear_converter_chp_multi_period.lp +0 -0
  319. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/linear_converter_invest.lp +0 -0
  320. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/linear_converter_multi_period.lp +0 -0
  321. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/link.lp +0 -0
  322. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/max_source_min_sink.lp +0 -0
  323. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/max_source_min_sink_multi_period.lp +0 -0
  324. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/maximum_shutdowns.lp +0 -0
  325. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/maximum_shutdowns_multi_period.lp +0 -0
  326. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/maximum_startups.lp +0 -0
  327. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/maximum_startups_multi_period.lp +0 -0
  328. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/nominal_value_to_zero.lp +0 -0
  329. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/nominal_value_to_zero_multi_period.lp +0 -0
  330. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/nonequidistant_timeindex.lp +0 -0
  331. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/offsetconverter.lp +0 -0
  332. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/offsetconverter_multi_period.lp +0 -0
  333. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/offsetconverter_nonconvex.lp +0 -0
  334. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/offsetconverter_nonconvex_investment.lp +0 -0
  335. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/periodical_emission_limit.lp +0 -0
  336. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/piecewise_linear_converter_cc.lp +0 -0
  337. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/piecewise_linear_converter_cc_multi_period.lp +0 -0
  338. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/piecewise_linear_converter_dcc.lp +0 -0
  339. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/piecewise_linear_converter_dcc_multi_period.lp +0 -0
  340. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/shared_limit.lp +0 -0
  341. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/shared_limit_multi_period.lp +0 -0
  342. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/source_with_gradient.lp +0 -0
  343. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/source_with_gradient_multi_period.lp +0 -0
  344. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/source_with_nonconvex_gradient.lp +0 -0
  345. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/source_with_nonconvex_gradient_multi_period.lp +0 -0
  346. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage.lp +0 -0
  347. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_fixed_losses.lp +0 -0
  348. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_fixed_losses_multi_period.lp +0 -0
  349. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_1.lp +0 -0
  350. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_2.lp +0 -0
  351. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_3.lp +0 -0
  352. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_4.lp +0 -0
  353. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_5.lp +0 -0
  354. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_6.lp +0 -0
  355. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_all_nonconvex.lp +0 -0
  356. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_minimum.lp +0 -0
  357. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_unbalanced.lp +0 -0
  358. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_with_offset.lp +0 -0
  359. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_invest_without_offset.lp +0 -0
  360. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_level_constraint.lp +0 -0
  361. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_multi_period.lp +0 -0
  362. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_unbalanced.lp +0 -0
  363. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/storage_unbalanced_multi_period.lp +0 -0
  364. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/summed_min_source.lp +0 -0
  365. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/summed_min_source_multi_period.lp +0 -0
  366. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/variable_chp.lp +0 -0
  367. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/lp_files/variable_chp_multi_period.lp +0 -0
  368. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_console_scripts.py +0 -0
  369. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_helpers.py +0 -0
  370. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_oemof_installation_test.py +0 -0
  371. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_outputlib/input_data.csv +0 -0
  372. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_outputlib/test_views.py +0 -0
  373. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_connect_invest/connect_invest.csv +0 -0
  374. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_generic_caes/generic_caes.csv +0 -0
  375. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_generic_chp/ccet.csv +0 -0
  376. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_invest_fix_flow/input_data.csv +0 -0
  377. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_simple_model/input_data.csv +0 -0
  378. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_storage_investment/storage_investment.csv +0 -0
  379. {oemof.solph-0.5.2.dev0 → oemof.solph-0.5.2.dev2}/tests/test_scripts/test_solph/test_variable_chp/variable_chp.csv +0 -0
@@ -1,5 +1,5 @@
1
1
  [bumpversion]
2
- current_version = 0.5.2dev0
2
+ current_version = 0.5.2.dev2
3
3
  commit = True
4
4
  tag = True
5
5
 
@@ -1,13 +1,15 @@
1
1
  # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
2
2
  version: 2
3
3
  build:
4
+ os: ubuntu-22.04
5
+ tools:
6
+ python: "3.8"
4
7
  apt_packages:
5
8
  - coinor-cbc
6
9
  sphinx:
7
10
  configuration: docs/conf.py
8
11
  formats: []
9
12
  python:
10
- version: "3.8"
11
13
  install:
12
14
  - requirements: docs/requirements.txt
13
15
  - method: pip
@@ -5,7 +5,6 @@ graft tests
5
5
 
6
6
  include .bumpversion.cfg
7
7
  include .coveragerc
8
- include .cookiecutterrc
9
8
  include .editorconfig
10
9
 
11
10
  include AUTHORS.rst
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: oemof.solph
3
- Version: 0.5.2.dev0
3
+ Version: 0.5.2.dev2
4
4
  Summary: A model generator for energy system modelling and optimisation.
5
5
  Home-page: https://oemof.org
6
6
  Author: oemof developer group
@@ -9,7 +9,6 @@ License: MIT
9
9
  Project-URL: Documentation, https://oemof-solph.readthedocs.io/
10
10
  Project-URL: Changelog, https://oemof-solph.readthedocs.io/en/latest/changelog.html
11
11
  Project-URL: Issue Tracker, https://github.com/oemof/oemof-solph/issues
12
- Platform: UNKNOWN
13
12
  Classifier: Development Status :: 5 - Production/Stable
14
13
  Classifier: Intended Audience :: Developers
15
14
  Classifier: Intended Audience :: Science/Research
@@ -28,11 +27,29 @@ Classifier: Programming Language :: Python :: Implementation :: CPython
28
27
  Classifier: Topic :: Utilities
29
28
  Requires-Python: >=3.8
30
29
  Description-Content-Type: text/x-rst
30
+ License-File: LICENSE
31
+ License-File: AUTHORS.rst
32
+ Requires-Dist: blinker
33
+ Requires-Dist: dill
34
+ Requires-Dist: numpy
35
+ Requires-Dist: pandas>=1.5.3
36
+ Requires-Dist: pyomo<7.0,>=6.6.0
37
+ Requires-Dist: networkx
38
+ Requires-Dist: oemof.tools>=0.4.2
39
+ Requires-Dist: oemof.network>=0.5.0a1
31
40
  Provides-Extra: dev
41
+ Requires-Dist: matplotlib; extra == "dev"
42
+ Requires-Dist: nbformat; extra == "dev"
43
+ Requires-Dist: pytest; extra == "dev"
44
+ Requires-Dist: sphinx; extra == "dev"
45
+ Requires-Dist: sphinx_rtd_theme; extra == "dev"
46
+ Requires-Dist: sphinx-copybutton; extra == "dev"
47
+ Requires-Dist: sphinx-design; extra == "dev"
48
+ Requires-Dist: termcolor; extra == "dev"
32
49
  Provides-Extra: examples
50
+ Requires-Dist: matplotlib; extra == "examples"
33
51
  Provides-Extra: dummy
34
- License-File: LICENSE
35
- License-File: AUTHORS.rst
52
+ Requires-Dist: oemof; extra == "dummy"
36
53
 
37
54
 
38
55
  |tox-pytest| |tox-checks| |appveyor| |coveralls| |codecov|
@@ -327,5 +344,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
327
344
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
328
345
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
329
346
  SOFTWARE.
330
-
331
-
@@ -0,0 +1 @@
1
+ __version__ = "0.5.2.dev2"
@@ -36,7 +36,7 @@ project = "oemof.solph"
36
36
  year = "2014-2023"
37
37
  author = "oemof-developer-group"
38
38
  copyright = "{0}, {1}".format(year, author)
39
- version = release = "0.5.2dev0"
39
+ version = release = "0.5.2.dev2"
40
40
 
41
41
  pygments_style = "trac"
42
42
  templates_path = ["."]
@@ -29,5 +29,4 @@ Examples
29
29
  minimal_investment.rst
30
30
  invest_nonconvex.rst
31
31
  offset_converter.rst
32
- electrical.lopf.rst
33
32
  custom_constraints.rst
@@ -643,8 +643,8 @@ The following example pictures a Pumped Hydroelectric Energy Storage (PHES). Bot
643
643
 
644
644
  solph.components.GenericStorage(
645
645
  label='PHES',
646
- inputs={b_el: solph.flows.Flow(investment= solph.Investment(ep_costs=500))},
647
- outputs={b_el: solph.flows.Flow(investment= solph.Investment(ep_costs=500)},
646
+ inputs={b_el: solph.flows.Flow(nominal_value=solph.Investment(ep_costs=500))},
647
+ outputs={b_el: solph.flows.Flow(nominal_value=solph.Investment(ep_costs=500)},
648
648
  loss_rate=0.001,
649
649
  inflow_conversion_factor=0.98, outflow_conversion_factor=0.8),
650
650
  investment = solph.Investment(ep_costs=40))
@@ -912,7 +912,7 @@ turbines.
912
912
 
913
913
  solph.components.Source(label='new_wind_pp', outputs={electricity: solph.flows.Flow(
914
914
  fix=wind_power_time_series,
915
- investment=solph.Investment(ep_costs=epc, maximum=50000))})
915
+ nominal_value=solph.Investment(ep_costs=epc, maximum=50000))})
916
916
 
917
917
  Let's slightly alter the case and consider for already existing wind power
918
918
  capacity of 20,000 kW. We're still expecting the total wind power capacity, thus we
@@ -922,7 +922,7 @@ allow for 30,000 kW of new installations and formulate as follows.
922
922
 
923
923
  solph.components.Source(label='new_wind_pp', outputs={electricity: solph.flows.Flow(
924
924
  fix=wind_power_time_series,
925
- investment=solph.Investment(ep_costs=epc,
925
+ nominal_value=solph.Investment(ep_costs=epc,
926
926
  maximum=30000,
927
927
  existing=20000))})
928
928
 
@@ -957,7 +957,7 @@ example of a converter:
957
957
  label='converter_nonconvex',
958
958
  inputs={bus_0: solph.flows.Flow()},
959
959
  outputs={bus_1: solph.flows.Flow(
960
- investment=solph.Investment(
960
+ nominal_value=solph.Investment(
961
961
  ep_costs=4,
962
962
  maximum=100,
963
963
  minimum=20,
@@ -1004,8 +1004,8 @@ mathematical background, like variables and constraints, which are used.
1004
1004
 
1005
1005
  .. _multi_period_mode_label:
1006
1006
 
1007
- Using the multi-period (investment) mode (experimental)
1008
- -------------------------------------------------------
1007
+ Multi-period (investment) mode (experimental)
1008
+ ---------------------------------------------
1009
1009
  Sometimes you might be interested in how energy systems could evolve in the longer-term, e.g. until 2045 or 2050 to meet some
1010
1010
  carbon neutrality and climate protection or RES and energy efficiency targets.
1011
1011
 
@@ -1020,7 +1020,7 @@ only unfolds if you look at long-term investments. Let's see how.
1020
1020
  First, you start by defining your energy system as you might have done before, but you
1021
1021
 
1022
1022
  * choose a longer-term time horizon (spanning multiple years, i.e. multiple periods) and
1023
- * explicitly define the `periods` attribute of your energy system which maps time steps to the simulated period.
1023
+ * explicitly define the `periods` attribute of your energy system which lists the time steps for each period.
1024
1024
 
1025
1025
  .. code-block:: python
1026
1026
 
@@ -1028,10 +1028,10 @@ First, you start by defining your energy system as you might have done before, b
1028
1028
  import oemof.solph as solph
1029
1029
 
1030
1030
  my_index = pd.date_range('1/1/2013', periods=17520, freq='H')
1031
- periods = {
1032
- 0: pd.date_range('1/1/2013', periods=8760, freq='H'),
1033
- 1: pd.date_range('1/1/2014', periods=8760, freq='H'),
1034
- }
1031
+ periods = [
1032
+ pd.date_range('1/1/2013', periods=8760, freq='H'),
1033
+ pd.date_range('1/1/2014', periods=8760, freq='H'),
1034
+ ]
1035
1035
  my_energysystem = solph.EnergySystem(timeindex=my_index, periods=periods)
1036
1036
 
1037
1037
  If you want to use a multi-period model you have define periods of your energy system explicitly. This way,
@@ -1057,17 +1057,16 @@ and adjust to your needs:
1057
1057
 
1058
1058
  Returns
1059
1059
  -------
1060
- periods : dict
1061
- pd.date_ranges defining the time stamps for the respective period,
1062
- starting with period 0
1060
+ periods : list
1061
+ periods for the optimization run
1063
1062
  """
1064
1063
  years = sorted(list(set(getattr(datetimeindex, "year"))))
1065
- periods = {}
1064
+ periods = []
1066
1065
  filter_series = datetimeindex.to_series()
1067
1066
  for number, year in enumerate(years):
1068
1067
  start = filter_series.loc[filter_series.index.year == year].min()
1069
1068
  end = filter_series.loc[filter_series.index.year == year].max()
1070
- periods[number] = pd.date_range(start, end, freq=datetimeindex.freq)
1069
+ periods.append(pd.date_range(start, end, freq=datetimeindex.freq))
1071
1070
 
1072
1071
  return periods
1073
1072
 
@@ -1144,7 +1143,7 @@ Here is an example
1144
1143
  inputs={hydrogen_bus: solph.flows.Flow()},
1145
1144
  outputs={
1146
1145
  electricity_bus: solph.flows.Flow(
1147
- investment=solph.Investment(
1146
+ nominal_value=solph.Investment(
1148
1147
  maximum=1000,
1149
1148
  ep_costs=1e6,
1150
1149
  lifetime=30,
@@ -1178,7 +1177,7 @@ This would mean that for investments in the particular period, these values woul
1178
1177
  inputs={hydrogen_bus: solph.flows.Flow()},
1179
1178
  outputs={
1180
1179
  electricity_bus: solph.flows.Flow(
1181
- investment=solph.Investment(
1180
+ nominal_value=solph.Investment(
1182
1181
  maximum=1000,
1183
1182
  ep_costs=[1e6, 1.1e6],
1184
1183
  lifetime=30,
@@ -1269,6 +1268,13 @@ Besides the `invest` variable, new variables are introduced as well. These are:
1269
1268
  * You can specify periods of different lengths, but the frequency of your timeindex needs to be consistent. Also,
1270
1269
  you could use the `timeincrement` attribute of the energy system to model different weightings. Be aware that this
1271
1270
  has not yet been tested.
1271
+ * For now, both, the `timeindex` as well as the `timeincrement` of an energy system have to be defined since they
1272
+ have to be of the same length for a multi-period model.
1273
+ * You can choose whether to re-evaluate assets at the end of the optimization horizon. If you set attribute
1274
+ `use_remaining_value` of the energy system to True (defaults to False), this leads to the model evaluating the
1275
+ difference in the asset value at the end of the optimization horizon vs. at the time the investment was made.
1276
+ The difference in value is added to or subtracted from the respective investment costs increment,
1277
+ assuming assets are to be liquidated / re-evaluated at the end of the optimization horizon.
1272
1278
  * Also please be aware, that periods correspond to years by default. You could also choose
1273
1279
  monthly periods, but you would need to be very careful in parameterizing your energy system and your model and also,
1274
1280
  this would mean monthly discounting (if applicable) as well as specifying your plants lifetimes in months.
@@ -1466,12 +1472,11 @@ This nonlinearity is linearised in the
1466
1472
  inputs={b_diesel: solph.flows.Flow()},
1467
1473
  outputs={
1468
1474
  b_el: solph.flows.Flow(
1469
- nominal_value=None,
1470
1475
  variable_costs=0.04,
1471
1476
  min=0.2,
1472
1477
  max=1,
1473
1478
  nonconvex=solph.NonConvex(),
1474
- investment=solph.Investment(
1479
+ nominal_value=solph.Investment(
1475
1480
  ep_costs=90,
1476
1481
  maximum=150, # required for the linearization
1477
1482
  ),
@@ -23,8 +23,8 @@ New features
23
23
 
24
24
  * Add option to run multi-period (dynamic) investment models with oemof.solph as an experimental feature:
25
25
  * You can change from standard model to multi-period model by defining the newly introduced `periods`
26
- attribute of your energy system. Be aware that it is experimental as of now. `periods` is a dictionary
27
- mapping the periods you want to model (usually years) to pandas.date_range objects.
26
+ attribute of your energy system. Be aware that it is experimental as of now. `periods` is a list
27
+ of the periods you want to model (usually years) given as pandas.date_range objects.
28
28
  * Add attributes `periods` to :class:`oemof.solph._energy_system.EnergySystem`.
29
29
  * Introduce new Pyomo Sets `PERIODS` and `TIMEINDEX` in :class:`oemof.solph.models.Model`.
30
30
  * Index all investment-related variables with `PERIODS` and flow variable with `TIMEINDEX`, which
@@ -0,0 +1,52 @@
1
+ v0.5.2 (????)
2
+ -------------
3
+
4
+ API changes
5
+ ###########
6
+
7
+ * New bool attribute `use_remaining_value` of `oemof.solph.EnergySystem`
8
+ * Use list for period definition in multi-period investment optimization.
9
+
10
+ New features
11
+ ############
12
+
13
+ * Allow for evaluating differences in the remaining vs. the original value
14
+ for multi-period investments.
15
+ * Allow to define minimum up- and down-time per time step
16
+
17
+ Documentation
18
+ #############
19
+
20
+ Bug fixes
21
+ #########
22
+
23
+ * Fix handling of investment annuities and fixed costs for multi-period models:
24
+ Limit to costs that occur within the optimization horizon to prevent a
25
+ bias towards investments happening earlier in the optimization horizon.
26
+ * Fix bugs in multi-period documentation.
27
+ * Fix y intersect of OffsetConverter
28
+ * Fix minimum uptime being relevant for initial downtime (and vice versa).
29
+ * Fix duplicated discounting of fixed costs for multi-period investment
30
+
31
+ Testing
32
+ #######
33
+
34
+ Other changes
35
+ #############
36
+
37
+ * Improved compatibility with upcoming oemof.network
38
+
39
+ Known issues
40
+ ############
41
+
42
+ * Documentation, example and API of OffsetConverter are inconsistent
43
+ and might not work as expected.
44
+
45
+ Contributors
46
+ ############
47
+
48
+ * Patrik Schönfeldt
49
+ * Johannes Kochems
50
+ * Julian Endres
51
+ * Hendrik Huyskens
52
+ * Raul Ciria Aylagas
@@ -19,5 +19,5 @@ exclude = '''
19
19
  '''
20
20
 
21
21
  [build-system]
22
- requires = ["setuptools<60.0", "wheel"]
22
+ requires = ["setuptools", "wheel"]
23
23
  build-backend = "setuptools.build_meta"
@@ -28,7 +28,7 @@ python_files =
28
28
  tests.py
29
29
  addopts =
30
30
  -ra
31
- --strict
31
+ --strict-markers
32
32
  --ignore=docs/conf.py
33
33
  --ignore=setup.py
34
34
  --ignore=ci
@@ -29,7 +29,7 @@ long_description = "%s" % (
29
29
 
30
30
  setup(
31
31
  name="oemof.solph",
32
- version="0.5.2dev0",
32
+ version="0.5.2.dev2",
33
33
  license="MIT",
34
34
  description=(
35
35
  "A model generator for energy system modelling and optimisation."
@@ -1,4 +1,4 @@
1
- __version__ = "0.5.2dev0"
1
+ __version__ = "0.5.2.dev2"
2
2
 
3
3
  from . import buses
4
4
  from . import components
@@ -62,6 +62,10 @@ class EnergySystem(es.EnergySystem):
62
62
  For a standard model, periods are not (to be) declared, i.e. None.
63
63
  A list with one entry is derived, i.e. [0].
64
64
 
65
+ use_remaining_value : bool
66
+ If True, compare the remaining value of an investment to the
67
+ original value (only applicable for multi-period models)
68
+
65
69
  kwargs
66
70
  """
67
71
 
@@ -71,14 +75,17 @@ class EnergySystem(es.EnergySystem):
71
75
  timeincrement=None,
72
76
  infer_last_interval=None,
73
77
  periods=None,
74
- **kwargs,
78
+ use_remaining_value=False,
79
+ groupings=None,
75
80
  ):
76
81
  # Doing imports at runtime is generally frowned upon, but should work
77
82
  # for now. See the TODO in :func:`constraint_grouping
78
83
  # <oemof.solph.groupings.constraint_grouping>` for more information.
79
84
  from oemof.solph import GROUPINGS
80
85
 
81
- kwargs["groupings"] = GROUPINGS + kwargs.get("groupings", [])
86
+ if groupings is None:
87
+ groupings = []
88
+ groupings = GROUPINGS + groupings
82
89
 
83
90
  if not (
84
91
  isinstance(timeindex, pd.DatetimeIndex)
@@ -133,10 +140,9 @@ class EnergySystem(es.EnergySystem):
133
140
  else:
134
141
  msg = (
135
142
  "Ensure that your timeindex and timeincrement are "
136
- "consistent.\nIf you are not considering non-equidistant "
137
- "timeindices, consider only specifying a timeindex."
143
+ "consistent."
138
144
  )
139
- warnings.warn(msg, debugging.SuspiciousUsageWarning)
145
+ warnings.warn(msg, debugging.ExperimentalFeatureWarning)
140
146
 
141
147
  elif timeindex is not None and timeincrement is None:
142
148
  df = pd.DataFrame(timeindex)
@@ -151,16 +157,19 @@ class EnergySystem(es.EnergySystem):
151
157
  if timeincrement is not None and (pd.Series(timeincrement) <= 0).any():
152
158
  msg = (
153
159
  "The time increment is inconsistent. Negative values and zero "
154
- "is not allowed.\nThis is caused by a inconsistent "
160
+ "are not allowed.\nThis is caused by a inconsistent "
155
161
  "timeincrement parameter or an incorrect timeindex."
156
162
  )
157
163
  raise TypeError(msg)
158
164
 
159
165
  super().__init__(
160
- timeindex=timeindex, timeincrement=timeincrement, **kwargs
166
+ groupings=groupings,
167
+ timeindex=timeindex,
168
+ timeincrement=timeincrement,
161
169
  )
162
170
 
163
- if periods is not None:
171
+ self.periods = periods
172
+ if self.periods is not None:
164
173
  msg = (
165
174
  "CAUTION! You specified the 'periods' attribute for your "
166
175
  "energy system.\n This will lead to creating "
@@ -170,48 +179,71 @@ class EnergySystem(es.EnergySystem):
170
179
  "now. If you find anything suspicious or any bugs, "
171
180
  "please report them."
172
181
  )
173
- warnings.warn(msg, debugging.SuspiciousUsageWarning)
174
- self.periods = periods
175
- self._extract_periods_years()
176
- self._extract_periods_matrix()
182
+ warnings.warn(msg, debugging.ExperimentalFeatureWarning)
183
+ self._extract_periods_years()
184
+ self._extract_periods_matrix()
185
+ self._extract_end_year_of_optimization()
186
+ self.use_remaining_value = use_remaining_value
177
187
 
178
188
  def _extract_periods_years(self):
179
- """Map simulation years to the respective period based on time indices
189
+ """Map years in optimization to respective period based on time indices
180
190
 
181
- Returns
182
- -------
183
- periods_years: dict
184
- the simulation year of the start of each a period,
185
- relative to the start of the optimization run and starting with 0
191
+ Attribute `periods_years` of type list is set. It contains
192
+ the year of the start of each period, relative to the
193
+ start of the optimization run and starting with 0.
186
194
  """
187
195
  periods_years = [0]
188
- if self.periods is not None:
189
- start_year = self.periods[0].min().year
190
- for k, v in enumerate(self.periods):
191
- if k >= 1:
192
- periods_years.append(v.min().year - start_year)
196
+ start_year = self.periods[0].min().year
197
+ for k, v in enumerate(self.periods):
198
+ if k >= 1:
199
+ periods_years.append(v.min().year - start_year)
193
200
 
194
- self.periods_years = periods_years
201
+ self.periods_years = periods_years
195
202
 
196
203
  def _extract_periods_matrix(self):
197
204
  """Determines a matrix describing the temporal distance to each period.
205
+
206
+ Attribute `periods_matrix` of type list np.array is set.
198
207
  Rows represent investment/commissioning periods, columns represent
199
208
  decommissioning periods. The values describe the temporal distance
200
209
  between each investment period to each decommissioning period.
210
+ """
211
+ periods_matrix = []
212
+ period_years = np.array(self.periods_years)
213
+ for v in period_years:
214
+ row = period_years - v
215
+ row = np.where(row < 0, 0, row)
216
+ periods_matrix.append(row)
217
+ self.periods_matrix = np.array(periods_matrix)
218
+
219
+ def _extract_end_year_of_optimization(self):
220
+ """Extract the end of the optimization in years
221
+
222
+ Attribute `end_year_of_optimization` of int is set.
223
+ """
224
+ duration_last_period = self.get_period_duration(-1)
225
+ self.end_year_of_optimization = (
226
+ self.periods_years[-1] + duration_last_period
227
+ )
228
+
229
+ def get_period_duration(self, period):
230
+ """Get duration of a period in full years
231
+
232
+ Parameters
233
+ ----------
234
+ period : int
235
+ Period for which the duration in years shall be obtained
201
236
 
202
237
  Returns
203
238
  -------
204
- period_distance_matrix: np.array
205
-
239
+ int
240
+ Duration of the period
206
241
  """
207
- periods_matrix = []
208
- if self.periods is not None:
209
- period_years = np.array(self.periods_years)
210
- for v in period_years:
211
- row = period_years - v
212
- row = np.where(row < 0, 0, row)
213
- periods_matrix.append(row)
214
- self.periods_matrix = np.array(periods_matrix)
242
+ return (
243
+ self.periods[period].max().year
244
+ - self.periods[period].min().year
245
+ + 1
246
+ )
215
247
 
216
248
 
217
249
  def create_time_index(
@@ -132,12 +132,21 @@ class BaseModel(po.ConcreteModel):
132
132
  "constraint_groups", []
133
133
  )
134
134
 
135
- self._constraint_groups += [
136
- i
137
- for i in self.es.groups
138
- if hasattr(i, "CONSTRAINT_GROUP")
139
- and i not in self._constraint_groups
140
- ]
135
+ if self.is_cellular:
136
+ for es in energysystem:
137
+ self._constraint_groups += [
138
+ i
139
+ for i in es.groups
140
+ if hasattr(i, "CONSTRAINT_GROUP")
141
+ and i not in self._constraint_groups
142
+ ]
143
+ else:
144
+ self._constraint_groups += [
145
+ i
146
+ for i in self.es.groups
147
+ if hasattr(i, "CONSTRAINT_GROUP")
148
+ and i not in self._constraint_groups
149
+ ]
141
150
 
142
151
  self.flows = self.es.flows()
143
152
  if self.is_cellular:
@@ -393,12 +402,11 @@ class Model(BaseModel):
393
402
  """Add all basic sets to the model, i.e. NODES, TIMESTEPS and FLOWS.
394
403
  Also create sets PERIODS and TIMEINDEX used for multi-period models.
395
404
  """
396
- self.nodes = self.es.nodes
405
+ self.nodes = list(self.es.nodes)
397
406
  if self.is_cellular:
398
407
  # collect all nodes from the child cells
399
408
  for cell in self.ec:
400
- for node in cell.nodes:
401
- self.nodes.append(node)
409
+ self.nodes.extend(cell.nodes)
402
410
  # create set with all nodes
403
411
  self.NODES = po.Set(initialize=[n for n in self.nodes])
404
412
 
@@ -13,7 +13,6 @@ SPDX-FileCopyrightText: Johannes Kochems
13
13
  SPDX-License-Identifier: MIT
14
14
 
15
15
  """
16
-
17
16
  from oemof.solph._plumbing import sequence
18
17
 
19
18
 
@@ -62,7 +61,7 @@ class Investment:
62
61
  Units lifetime, given in years; only applicable for multi-period
63
62
  models
64
63
  age : int, :math:`a`
65
- Units start age, given in years at the beginning of the simulation;
64
+ Units start age, given in years at the beginning of the optimization;
66
65
  only applicable for multi-period models
67
66
  interest_rate : float, :math:`ir`
68
67
  Interest rate for calculating annuities when investing in a particular
@@ -184,14 +183,14 @@ class NonConvex:
184
183
  from the actual output.
185
184
  inactivity_costs : numeric (iterable or scalar)
186
185
  Costs associated with not operating the flow.
187
- minimum_uptime : numeric (1 or positive integer)
188
- Minimum time that a flow must be greater then its minimum flow after
189
- startup. Be aware that minimum up and downtimes can contradict each
190
- other and may lead to infeasible problems.
191
- minimum_downtime : numeric (1 or positive integer)
192
- Minimum time a flow is forced to zero after shutting down.
193
- Be aware that minimum up and downtimes can contradict each
194
- other and may to infeasible problems.
186
+ minimum_uptime : numeric or list of numeric (1 or positive integer)
187
+ Minimum number of time steps that a flow must be greater then its
188
+ minimum flow after startup. Be aware that minimum up and downtimes
189
+ can contradict each other and may lead to infeasible problems.
190
+ minimum_downtime : numeric or list of numeric (1 or positive integer)
191
+ Minimum number of time steps a flow is forced to zero after
192
+ shutting down. Be aware that minimum up and downtimes can
193
+ contradict each other and may to infeasible problems.
195
194
  maximum_startups : numeric (0 or positive integer)
196
195
  Maximum number of start-ups in the optimization timeframe.
197
196
  maximum_shutdowns : numeric (0 or positive integer)
@@ -199,12 +198,12 @@ class NonConvex:
199
198
  initial_status : numeric (0 or 1)
200
199
  Integer value indicating the status of the flow in the first time step
201
200
  (0 = off, 1 = on). For minimum up and downtimes, the initial status
202
- is set for the respective values in the edge regions e.g. if a
203
- minimum uptime of four timesteps is defined, the initial status is
204
- fixed for the four first and last timesteps of the optimization period.
205
- If both, up and downtimes are defined, the initial status is set for
206
- the maximum of both e.g. for six timesteps if a minimum downtime of
207
- six timesteps is defined besides a four timestep minimum uptime.
201
+ is set for the respective values in the beginning e.g. if a
202
+ minimum uptime of four timesteps is defined and the initial status is
203
+ set to one, the initial status is fixed for the four first timesteps
204
+ of the optimization period. Otherwise if the initial status is set to
205
+ zero and the first timesteps are fixed for the number of minimum
206
+ downtime steps.
208
207
  negative_gradient_limit : numeric (iterable, scalar or None)
209
208
  the normed *upper bound* on the positive difference
210
209
  (`flow[t-1] < flow[t]`) of two consecutive flow values.
@@ -232,8 +231,8 @@ class NonConvex:
232
231
  custom_attributes = {}
233
232
 
234
233
  self.initial_status = initial_status
235
- self.minimum_uptime = minimum_uptime
236
- self.minimum_downtime = minimum_downtime
234
+ self.minimum_uptime = sequence(minimum_uptime)
235
+ self.minimum_downtime = sequence(minimum_downtime)
237
236
  self.maximum_startups = maximum_startups
238
237
  self.maximum_shutdowns = maximum_shutdowns
239
238
 
@@ -247,11 +246,7 @@ class NonConvex:
247
246
  for attribute, value in custom_attributes.items():
248
247
  setattr(self, attribute, value)
249
248
 
250
- @property
251
- def max_up_down(self):
252
- """Return maximum of minimum_uptime and minimum_downtime.
253
-
254
- The maximum of both is used to set the initial status for this
255
- number of time steps within the edge regions.
256
- """
257
- return max(self.minimum_uptime, self.minimum_downtime)
249
+ if initial_status == 0:
250
+ self.first_flexible_timestep = self.minimum_downtime[0]
251
+ else:
252
+ self.first_flexible_timestep = self.minimum_uptime[0]
@@ -61,7 +61,7 @@ class _Sequence(UserList):
61
61
  --------
62
62
  >>> s = _Sequence(default=42)
63
63
  >>> len(s)
64
- 0
64
+ 1
65
65
  >>> s[1]
66
66
  42
67
67
  >>> s[2]
@@ -79,7 +79,7 @@ class _Sequence(UserList):
79
79
  def __init__(self, *args, **kwargs):
80
80
  self.default = kwargs["default"]
81
81
  self.default_changed = False
82
- self.highest_index = -1
82
+ self.highest_index = 0
83
83
  super().__init__(*args)
84
84
 
85
85
  def __getitem__(self, key):